Home  >  Article  >  Web Front-end  >  Summary of JS methods for obtaining child, parent, and sibling nodes

Summary of JS methods for obtaining child, parent, and sibling nodes

韦小宝
韦小宝Original
2018-01-22 09:59:071778browse

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 d8f04bce924a5373c7052ba2014e1df6 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