Home > Article > Web Front-end > Summary 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
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 |
represents the entire document (the root node of the Dom tree, that is, document) | 9 |
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
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!