gpt4 book ai didi

javascript - 在 javascript 中实现 document.getElementById

转载 作者:行者123 更新时间:2023-11-29 10:02:53 26 4
gpt4 key购买 nike

我正在尝试在 javascript 中实现 native document.getElementById。我已经在 javascript 中实现了 document.getElementsByClassName

function getElementsByClassName (className) {
var nodeList = [];
function test(node) {
if (node.classList && node.classList.contains(className)) {
nodeList.push(node);
}

for (var index = 0; index < node.childNodes.length; index++) {
test(node.childNodes[index]);
}

return nodeList;
}

test(document.body);

return nodeList;
};

// Fails here.
function getElementById(className) {
const result = [];

function getEachIDNode(node) {
if(node.contains(className)) {
return node;
}

for(let i=0; i<node.childNodes.length; i++) {
getEachIDNode(node.childNodes[i]);
}

}

getEachIDNode(document.body);
}

console.log(getElementsByClassName('winner'));
console.log(getElementById('test'));
  <table>      
<tr id="test">
<td>#</td>
<td class="winner">aa</td>
<td>bb</td>
<td>cc</td>
<td>dd</td>
</tr>
</table>

<table>
<tr>
<td>#</td>
<td class="winner">aa</td>
<td>bb</td>
<td>cc</td>
<td>dd</td>
</tr>
</table>

<table>
<tr>
<td>#</td>
<td class="winner">dd</td>
<td>cc</td>
<td>bb</td>
<td>aa</td>
</tr>
</table>

我正在尝试了解如何检查节点是否具有属性 ID。

谁能教教我?

最佳答案

根据传递的参数检查节点的 id 属性(使用 id 作为参数可能比 className 更好):

function getElementById(id) {
const result = [];

function getEachIDNode(node) {
if(node.id === id) {
result.push(node);
}
for(let i=0; i<node.childNodes.length; i++) {
getEachIDNode(node.childNodes[i]);
}
}
getEachIDNode(document.body);
return result;
}
console.log(getElementById('subchild')[0].innerHTML);
<div id="parent">
<div id="child1">
</div>
<div id="child2">
<div id="subchild">
subchild!
</div>
</div>
</div>

但是如果您实际上想要复制getElementById,不要尝试返回数组,返回单个元素:

function getElementById(id) {
let match = null;
const doFind = node => {
if (!match && node.id === id) match = node;
if (!match) return [...node.childNodes].find(doFind);
}
doFind(document.body);
return match;
}
console.log(getElementById('subchild').innerHTML);
<div id="parent">
<div id="child1">
</div>
<div id="child2">
<div id="subchild">
subchild!
</div>
</div>
</div>

关于javascript - 在 javascript 中实现 document.getElementById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51490513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com