search
HomeWeb Front-endJS TutorialSummary of JS methods for obtaining child, parent, and sibling nodes

This article mainly introduces a summary of the methods of obtaining child, parent, and sibling nodes in JS and two methods of obtaining sibling nodes in JS. Friends who are interested in JS can refer to this article.

We are in the actual development In, it is often necessary to obtain a certain html element in the page and dynamically update the element's style, content attributes, etc.

We already know that the following methods are provided in JavaScript to obtain child, parent, and sibling nodes:

   Conventional

Get the child node through the parent node:

parentObj.firstChild                                               ] ‘' Get the known parent The last child node of the node
parentObj.childNodes                                                                                                                                                                                                       havingtaking being going to having to having's experience to be inflate then Get the direct child of a known node Node array (same effect as childNodes in IE7)
parentObj.
getElementsByTagName
(tagName) Returns an array of child nodes of the specified value type in known child nodesGet brothers through adjacent nodes Node:

neighbourNode.previousSibing                                                                                                                                                                                                                        Get the previous sibling node of the known node

neighbourNode.nextSibing                                     Child node gets parent node:


  1. childNode.parentNode                                                                                                                                                                can get the parent node of the known node

The above method can basically be used recursively, parentObj.firstChild.firstChild.firstChild... But there is a kind of such code Stupidly rushing. .

 

Extension

Before expansion, we need to know some basic knowledge about nodes: In Dom nodes, each node has different Type The types of Dom nodes commonly used in W3C specifications are as follows

##Document Node represents the entire document (the root node of the Dom tree, that is, document) 9

About the name of the node, different types of nodes correspond to different names


Node type Description Value
Element node Each HTML tagThey are all an element node 1
Attribute node Attributes of the element node (HTML tag), such as id, class, name, etc. 2
Text node Text content in element node or attribute node 3
Comment node is the comment of the document, in the form of 8
Node type Node name
Element node HTML name (uppercase)
Attribute node The name of the attribute
Text node its value is always #text
Document node Its value is always #document

You can return the node type, node name and node value respectively through nodeType (node ​​type), nodeName (node ​​name), and nodeValue (node ​​value) (for example, element nodes return 1, attribute nodes return 2)

Two ways to get sibling nodes in JS

Method 1: First find the "sibling elements" including yourself through the child elements of the parent element. Then eliminate yourself

function sibling(elem){
 var a = [];
 var b = elem.parentNode.children;
 for (var i = 0 ; i < b.length ; i++){
  if(b[i] !== elem) a.push(b[i]);
 }
 return a;
}

Method 2: Implement the method in jQuery, first find the first child element of the element, and then continue to find the next adjacent element, judge and eliminate yourself.

siblings:function(elem)
{
  return JQuery.sibling(elem.parentNode.firstNode,elem);
}
JQuery.sibling = function(n,elem){
  var r = [];
  for (;n;n= n.nextSibling){
  if(n.nodeType == 1 && (!elem || elem != elem))
  r.push(n);
 } 
  return r;
}

This code can be found in jQuery 1.2 and more versions. In the version of jQuery 1.2.3 I looked at, this code can be found at line 1800:

Convert this method to Independently available functions:

fucntion sibling(elem){
 var r = [];
 var n = elem.parentNode.firstChild;
 for(;n;n = n.nextSibling) {
  if(n.nodeType === 1 && n !== elem) {
   r.push(n);
  }
 } 
  return r;
}

Obviously, by using this method to find the sibling elements of a specific node, you can easily avoid the redundancy of recursion.

Get all element child nodes

In JavaScript, you can get all child nodes through children (only return HTML, not even Return child nodes), which is supported by almost all browsers, but is not supported in some versions of Firefox.

Note: In IE, children contains annotation nodes

So because of the existence of special circumstances, sometimes we need to get only element nodes, so that we can filter through the nodeType attribute, using The above knowledge: nodes with nodeType == 1 are element nodes.

Below, define a function from to get all element child nodes:

var getChildNodes = function(elem) {
 var childArr = elem.children || elem.childNodes, 
   childArrTem = new Array();
  for (var i = 0 ; i < childArr.length; i ++ ) {
   if (childArr[i].nodeType == 1){
   childArrTem.push(childArr[i]); 
  }
 } 
 return childArrTem;
}

Get all parent nodes

Similarly, we can get all the parent nodes of the current node:

function getParents (elem){
 var parents = [];
 while(elem.parentNode){
  parents.push(elem.parentNode)
  elem = elem.parentNode;
 } 
 return parents;
}

In this way, we can accept a dom node and eventually get the document object. If we only need to get the top layer to be the body, You can change the judgment in while to: while (elem.parentNode && elem.parentNode.tagName == 'BODY'

According to the methods and related methods for obtaining nodes provided in JavaScript Knowledge, we can write many encapsulation methods. Try it, how many methods can you write to get nodes?

After we write some encapsulation of operating nodes, let’s take a look at jQueryDom operationThe source code of the node method will be much easier

Related recommendations:

##JavaScript implementation of automatic music switching and carousel example tutorial

Detailed explanation of JavaScript plug-in Tab

JavaScript function binding usage analysis

The above is the detailed content of Summary of JS methods for obtaining child, parent, and sibling nodes. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool