当前位置: 首页 > 知识库问答 >
问题:

如何创建向属性添加DOM属性的JavaScript循环?

吴升
2023-03-14

我有一个表,其中的单元格不是ContentEditable。 但是,使用JavaScript循环或函数,我想使它们如此。

我知道,为每个单元格手动执行这一操作非常简单,对于只有几个单元格的表来说,这可能会更容易,但我希望通过循环/函数加快这一过程,因为表可能会变得更大,并且手动将每个单元格设置为可满足编辑的时间将非常乏味。

下面是一个快速的例子,显示了一个表格计算器,目前不可编辑。 但是使用循环或函数,我希望在DOM中将右列中的每个单元格设置为.contenteditable=true。 我认为这些参数看起来类似于(var I=0;l!=rows.length;I ,但我很难理解参数后面的语句必须是什么才能使循环/函数工作。 任何帮助都将不胜感激!

null

function myFunction() {
  var jack2 = document.getElementById("jack").innerText;
  var john2 = document.getElementById("john").innerText;
  var joe2 = document.getElementById("joe").innerText;

  var total2 = (parseInt(jack2) || 0) + (parseInt(john2) || 0) + (parseInt(joe2) || 0);

  document.getElementById("total").innerHTML = total2;
}
table {
  width: 100%;
}

table,
tr,
th,
td {
  border: 1px solid gray;
  border-collapse: collapse;
  font-family: Arial;
  margin: 5px;
}
<table>
  <caption>Weight Calculator</caption>
  <tr class="cell">
    <th>Person</th>
    <th>Weight (kg)</th>
  </tr>
  <tr class="cell">
    <td>Jack</td>
    <td id="jack" oninput="myFunction()">1</td>
  </tr>
  <tr class="cell">
    <td>John</td>
    <td id="john" oninput="myFunction()">2</td>
  </tr>
  <tr class="cell">
    <td>Joe</td>
    <td id="joe" oninput="myFunction()">3</td>
  </tr>
  <tr class="cell">
    <td>Total</td>
    <td id="total"></td>
  </tr>
</table>

null


共有2个答案

葛嘉悦
2023-03-14

获取表格中有左邻格的所有单元格(标题不受影响,因为有th而没有td)。 向这些单元格中的每个单元格添加您的属性。编辑过:要获取totalsum,请在每个td上添加一个eventlistener,如果内容发生更改,它将调用Calc函数。

null

function myFunction() {
    let weightCells = document.querySelectorAll("table tr:not(:last-child) td ~ td");
    weightCells.forEach(td => {
        td.setAttribute('contentEditable', true);
        td.addEventListener ("change", calcSum());
    });
}

function calcSum() {
    let sum=0;
    let weightCells = document.querySelectorAll("table tr td ~ td");
    let count = weightCells.length-1;
    for (i=0; i<count; i++) {
        sum +=  parseInt(weightCells[i].innerHTML) || 0;
    }
  weightCells[count].innerHTML = sum;
}

myFunction();
table {
  width: 100%;
}

table,
tr,
th,
td {
  border: 1px solid gray;
  border-collapse: collapse;
  font-family: Arial;
  margin: 5px;
}
<table>
  <caption>Weight Calculator</caption>
  <tr class="cell">
    <th>Person</th>
    <th>Weight (kg)</th>
  </tr>
  <tr class="cell">
    <td>Jack</td>
    <td id="jack" oninput="myFunction()">1</td>
  </tr>
  <tr class="cell">
    <td>John</td>
    <td id="john" oninput="myFunction()">2</td>
  </tr>
  <tr class="cell">
    <td>Joe</td>
    <td id="joe" oninput="myFunction()">3</td>
  </tr>
  <tr class="cell">
    <td>Total</td>
    <td id="total"></td>
  </tr>
</table>
巢烨
2023-03-14

您可以选择整个表,然后使用querySelectorAll获取所有行,然后为每一行更改第二个td的contenteditable,如下所示

代码en

let table = document.getElementById('table')
let rows = table.querySelectorAll('tr')

rows.forEach(row => {
  let tds = row.querySelectorAll('td') 
  // all the cells of the row
  if (tds.length > 0) { // if it is not the header
    tds[1].contentEditable = true 
    // change the contenteditable
  }
})

(如果您有多个表,则需要向表中添加id)

<table id="table">
...
</table>

 类似资料:
  • 问题内容: $(‘div’).data(‘info’, 1); 我在jquery中创建元素。之后,我要添加属性“数据”。他很喜欢,并且被添加了,但是在DOM中,这并不明显,我无法使用 问题答案: 使用方法: 请注意,这不会创建实际的属性。如果需要创建属性,请使用:

  • 我在jQuery中创建元素。之后,我想添加属性“数据”。他的喜欢,并添加,但在DOM中,这是不明显的,我不能得到的项目,使用 jsfiddle

  • 我想在我的< code >上添加属性 似乎路线路径确实与问号混淆了。如果我把它换成其他东西,比如一个符号戳,它就会“起作用”。然而,这不是我想要的格式。我想要常规的<代码> 我找不到关于如何使这样的东西工作的文档。我看到了一些关于url的部分的东西,但我不太理解它。 谢谢你的所有帮助

  • 我试图将一个名为sAMAccountName的新属性添加到一个已经存在的LDAP模式定义中,该定义由IM-LDAP使用UnboundID LDAP SDK读取。 我已经在MatchingGruleUse中添加了attributeTypes条目和sAMAccountName。 对于每个以前存在的属性,调用将返回属性类型。但不是因为我的新属性。 我错过了什么? 10/11/18在@jwilleke评论

  • 问题内容: 我想在Python中创建一个动态对象(在另一个对象内部),然后向其添加属性。 我试过了: 但这没用。 有任何想法吗? 编辑: 我正在从循环遍历值列表的循环中设置属性,例如 在上面的例子中,我会得到,,。 我使用该函数是因为我不知道如何从循环中进行操作。 如何根据上例中的值设置属性? 问题答案: 您可以使用我古老的Bunch配方,但是如果您不想创建“绑定类”,则Python中已经存在一个

  • 问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程

  • 问题内容: 我正在尝试找到一种使用JavaScript添加/更新属性的方法。我知道我可以使用功能来做到这一点,但在IE中不起作用。 问题答案: 您可以在此处阅读有关许多不同浏览器(包括IE)中属性的行为的信息。 即使在IE中也应该做到这一点。你试过了吗?如果它不起作用,则可能 会起作用。

  • 问题内容: 目标是创建一个行为类似db结果集的模拟类。 因此,例如,如果数据库查询使用表达式返回,那么我想看看: 刚开始我以为我可以这样做: 但返回一个属性对象。 用替换该行根本没有用。 那么在运行时创建实例属性的正确方法是什么? 问题答案: 我想我应该扩大这个答案,因为我年纪大一些并且比较聪明,并且知道发生了什么事。迟到总比不到好。 你可以动态地向类添加属性。但这很重要:你必须将其添加到类中。