-1

当我单击全部时,我想获取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';
    }
}  
4

1 回答 1

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节点;!==检查精确的参考匹配(通常使用!==and的好习惯===)。

于 2012-04-05T13:06:30.933 回答