检查当前元素是奇数还是偶数(Check if current element is even or

2019-10-20 14:43发布

有一个简单的方法来检查的节点列表当前元素是否是其母公司的偶/奇的孩子。

例如,如果有一个链接列表。

<ul>
 <li>Odd</li>
 <li>Even</li>
 <li>Odd</li>
 <li>Even</li>
 <li>Odd</li>
</ul>

我遍历这样的节点列表:

var links = document.querySelectorAll("ul li");

for (i = 0; i < links.length; i++) {
   var link = links[i];
   var parent = link.parentNode;

   if (// this is an even link) {
      console.log("even");
   }
   else {
      console.log("odd");
   }
}

我将如何确定当前的链接是奇数还是偶数?

我想选择所有父奇的一个新的节点列表的li用元素li:nth-child(odd)的母公司,然后检查当前节点是否是在该节点列表。 虽然我不知道该怎么做准确。

如何检查当前节点是否是奇/偶相对于它的父?

Answer 1:

这个问题类似于在纯JavaScript获取元素的第n个孩子数

如何检查当前节点是否是奇/偶相对于它的父?

与单纯递增的问题i在每个迭代上,因为所有其他的答案都在做,就是这种计算是没有关系的任何父节点。 如果您发现,没有一个现有的答案利用link.parentNode了!

由于计算是不知道的父节点的背景下,它基本上假设恰好有一个ul元素,所有的li元素是一个儿童ul才能正常工作。 你嵌套的那一刻ul元素,甚至只是多个ul元素在同一文件中,这将打破。

请注意,这个问题是不是%线。 事实上,这正是你如何确定一个整数是偶数或奇数。 的问题是,索引没有被相对于父节点计算。

例如,如果我修改列表,包括嵌套ul恰好与一个li

<ul>
 <li>Odd
  <ul>
   <li>Odd</li>
  </ul>
 </li>
 <li>Even</li>
 <li>Odd</li>
 <li>Even</li>
 <li>Odd</li>
</ul>

输出将是完全错误的 ,一旦它计算在内li (第二行):

[12:07:25.505] odd
[12:07:25.505] even
[12:07:25.505] odd
[12:07:25.505] even
[12:07:25.506] odd
[12:07:25.506] even

我在写一个脚本回答到类似的问题,我挂上面。 这里的报价:

实现这一点,更是万无一失的方法之一是遍历每个元素的父节点的子节点,增加了性的元素节点的每个子节点的计数器(因为:nth-child()只计算元素节点):

而这里的脚本,适合你的使用情况:

var links = document.querySelectorAll("ul li");

for (var i = 0; i < links.length; i++) {
   var link = links[i];
   var parent = link.parentNode;
   var child = parent.firstChild;
   var index = 0;

   while (true) {
      if (child.nodeType === Node.ELEMENT_NODE) {
         index++;
      }

      if (child === link || !child.nextSibling) {
         break;
      }

      child = child.nextSibling;
   }

   if (index % 2 == 0) {
      console.log("even");
   }
   else {
      console.log("odd");
   }
}

现在,输出将是正确的 :

[12:35:22.273] odd
[12:35:22.273] odd
[12:35:22.273] even
[12:35:22.273] odd
[12:35:22.273] even
[12:35:22.273] odd

再次,第二行表示内li ,这在修改的HTML是它的父的第一(和因此奇数)子ul



Answer 2:

只是检查是否i+1为偶数或奇数

for (i = 0; i < links.length; i++) {
   var link = links[i];
   var parent = link.parentNode;

   if ((i+1)%2 == 0) {
      console.log("even");
   }
   else {
      console.log("odd");
   }
}


Answer 3:

使用模运算符 :

if ((i+1)%2==0) {
      console.log("even");
   }
   else {
      console.log("odd");
   }


文章来源: Check if current element is even or odd