当我点击All时,我希望得到不同行表中的所有li
个元素。在这里,我获得了一行的所有li
元素。
<ul class="clsInfo">
<li id="liAll" onclick="Activelink(this);">
<a href="#">
<label id="lblAll">All</label>
</a>
</li>
</ul>
代码:
function Activelink(sender) {
var a_elements = sender.parentNode.getElementsByTagName("a");
for (var i = 0, len = a_elements.length; i < len; i++) {
a_elements[i].style.color = 'black';
}
}
答案 0 :(得分:1)
您描述了li
元素和表格,但您的代码正在设置a
(锚点)标记的属性。如果您的“全部”链接嵌套在我们在html示例中看不到的表中,那么您需要通过循环找到它:
function findParentalTable(el) {
var current = el;
while((current !== document) && (current.tagName != "TABLE")) {
current = current.parentNode;
}
return current;
}
然后你的代码将是
function Activelink(sender) {
var parentalTable = findParentalTable(sender);
var a_elements = parentalTable.getElementsByTagName("a");
for (var i = 0, len = a_elements.length; i < len; i++) {
a_elements[i].style.color = 'black';
}
}
元素的父节点是另一个DOM元素,并且所有DOM元素都具有属性tagName,它是大写的标记字符串,如TABLE。 while循环只是在DOM树中向上查找<table>
标记。一旦找到表标记,current.tagName就会是TABLE,条件将失败,允许函数返回该元素。为了防止传递给findParentalTable
的元素上方没有表元素,我还检查我们是否未到达DOM的顶部,即document
节点; !==
检查确切的参考匹配(通常使用!==
和===
的良好做法)。