javascript - 为什么 parentNode 会替换 td 的所有元素而不是指定的元素?

标签 javascript html setattribute parent-node

您好!

有人可以看看我的代码并告诉我哪里出了问题吗? (不,我无权编辑 HTML。)

我试图将 id="goToThis" 放在与 v(weekNumber) 匹配的第一个父级上,在本例中为 v2。

问题:它将它设置在每个 parent 身上,而不仅仅是那些匹配“goToweek”的 parent 。

我希望它只在第一个匹配的上添加“goToThis”。

Javascript(RESULT = "2019, 2"):

function setAttributes()
{ 

    var goToweek = "<td>v" + result[1] + "</td>"
        elementos = document.body.getElementsByTagName("td");

    for (var is = 0, length = elementos.length; is < length; is++)
    {   

        for (var cc in goToweek)
        {
            if (elementos[is].innerHTML.indexOf(goToweek[cc]) !== -1)
            {   

                parentOfTds2 = (elementos[is]).parentNode;
                parentOfTds2.setAttribute("id", "goToThis");
            }
        };
    };
}

示例 HTML:

<tr>
  <td>2016</td>
  <td>v2</td>
</tr>
<tr>
  <td>2016</td>
  <td>v4</td>
</tr>
<tr>
  <td>2016</td>
  <td>v5</td>
</tr>
<tr>
  <td>2016</td>
  <td>v6</td>
</tr>
<tr>
  <td>2016</td>
  <td>v7</td>
</tr>
<tr>
  <td>2016</td>
  <td>v8</td>
</tr>
<tr>
  <td>2016</td>
  <td>v22</td>
</tr>........

代码执行后::

<tr id="goToThis">
  <td>2016</td>
  <td>v2</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v4</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v5</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v6</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v7</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v8</td>
</tr>
<tr id="goToThis">
  <td>2016</td>
  <td>v22</td>
</tr>........

我要:

<tr id="goToThis">
  <td>2016</td>
  <td>v2</td>
</tr>
<tr>
  <td>2016</td>
  <td>v4</td>
</tr>
<tr>
  <td>2016</td>
  <td>v5</td>
</tr>
<tr>
  <td>2016</td>
  <td>v6</td>
</tr>
<tr>
  <td>2016</td>
  <td>v7</td>
</tr>
<tr>
  <td>2016</td>
  <td>v8</td>
</tr>
<tr>
  <td>2016</td>
  <td>v22</td>
</tr>........

最佳答案

这是我想出的一个快速解决方案。

function setAttributes() { 
   const elementos = document.getElementsByTagName("tr");
   for (let is = 0; is < elementos.length; is++) { 
      const innerElements = elementos[is].children;
      if (innerElements[0].innerHTML === (""+result[0]) && innerElements[1].innerHTML === ("v"+result[1])) {   
          elementos[is].id = "goToThis";
          break;
      }
   }
}

我从您的示例中发现的问题是,即使您将元素的 innerHTMLgoToWeek 进行比较,您如何确定 td 年份与结果数组中的年份相同吗?

为了避免这种情况而不是获取所有 td 我获取了所有 tr 元素并检查年份和星期是否匹配并将 id 添加到相应的 tr parent 并跳出循环。这应该将 goToThis 附加到匹配年和周的第一个元素。

关于javascript - 为什么 parentNode 会替换 td 的所有元素而不是指定的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54113107/

相关文章:

javascript - ESLint 在基于 es6 的导入时失败 npm run build

javascript - 为什么 Mocha 测试不在 Travis 上运行,而是在本地运行?

javascript - 少编译和保存 Bootstrap

javascript - 使用 If Else 语句和 document.getElementByID 进行表单验证

javascript - angularjs中的拆分函数

javascript - 如何将文件输入转换为base64 - React js

javascript - 有一个 DIV 'stick' 用于 x 数量的卷轴

javascript - 游戏循环似乎在迭代数组结束时中断。未捕获的类型错误

javascript - 如何使用javascript或jquery修改一个:before psedo-element attribute?

javascript - 如何将表单输入属性设置为计算的全局变量值