var oDiv = document.getElementById('div1');
// -> 首先獲取所有的子節點(childNodes),在所有的子節點中,把元素節點過濾出來(nodeType === 1)
// -> 如果多傳遞一個標簽名,還要在獲取的子元素集合中把對應標簽名的進行二次篩選
function children(currentElement, tagName) {
var ary = [];
// -> IE6-8下不能使用內置的children屬性,則自己寫代碼實現
if (/MSIE (6|7|8)/i.test(navigator.userAgent)) {
var nodeList = currentElement.childNodes;
for (var i = 0, len = nodeList.length; i < len; i++) {
var curNode = nodeList[i];
if (curNode.nodeType === 1) {
ary[ary.length] = curNode;
}
}
} else {
// 標準瀏覽器中,直接使用children即可,但是這樣獲取的是一個元素集合(類數組),
// 為了和IE6-8下保持一致,借用數組原型上的slice實現把類數組轉化為數組
ary = Array.prototype.slice.call(currentElement.children);
}
// [div,div,div,p,p,p] len=6 i=0 i<6 i++
// -> 二次篩選
if (typeof tagName === 'string') {
for (var k = 0; k < ary.length; k++) {
var curElemNode = ary[i];
if (curElemNode.nodeName.toLowerCase() !== tagName.toLowerCase()) {
// -> 不是想要的標簽
ary.slice(k, 1);
k--;
}
}
}
return ary;
}
console.log(children(oDiv, 'p').length);
封裝: 獲取指定元素的所有(指定)子節點
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- > 在開發中,會發現僅管是一個后端人員,也會有需要去寫一下前端頁面。介紹一下前端頁面中,如何去獲取元素 ``` $...
- 完成項 jq實現選擇表單提交非click事件動態綁定判斷是否隱藏 1.jq實現選擇表單提交 主要是選擇器的應用,以...
- ShareSDK下載地址: http://www.mob.com/#/downloadDetail/Share...