Javascript 通过For循环更改文本节点,但导致意外标识符

Javascript 通过For循环更改文本节点,但导致意外标识符,javascript,html,Javascript,Html,所以我有一个问题,我认为Javascript可以解决,因为我还在学习语言,这是另一个问题,所以我在这里寻求帮助 我想包装我想选择加入的文本节点,以接收将来的通信。在 我的计划是循环它,以便它将span添加到元素下的所有节点文本内容中 所以我对它进行了编码,控制台显示错误uncaughtsyntaxerror:Unexpected identifier 原始HTML 所以我得出了这个结论,我认为看起来很糟糕的代码似乎不起作用,而且是一个变量怪胎 JS 最后,我要找的是 <tbody>

所以我有一个问题,我认为Javascript可以解决,因为我还在学习语言,这是另一个问题,所以我在这里寻求帮助

我想包装我想选择加入的文本节点,以接收将来的通信。在

我的计划是循环它,以便它将span添加到元素下的所有节点文本内容中

所以我对它进行了编码,控制台显示错误uncaughtsyntaxerror:Unexpected identifier

原始HTML

所以我得出了这个结论,我认为看起来很糟糕的代码似乎不起作用,而且是一个变量怪胎

JS

最后,我要找的是

<tbody>
  <tr>
    <td>
      <label class="gotowebinar-required" for="577271555173">
        <span style="font-weight: bold;"class="label_1">I would like to opt in to receive future communication from.</span>
      </label>
    </td>
  </tr>
</tbody>
对于所有具有GoTowBinar类的元素,都是必需的

为什么字母b在那里的末尾?如果删除b,代码运行正常

另外,请格式化您的代码:

你不能把JS代码放在一个变量里,然后在任何地方把它打碎。变量不能替代任意语法

[and]之间的代码可以是表达式,但[and]必须显式键入:

var x = document.getElementsByClassName('gotowebinar-required')[i];

您还需要循环,直到达到长度,而不是超过一个长度 不能像以前那样使用“[”和“]”引用数组中的项。如果您使用下面的直接[i]式代码,您就可以开始了

function changeEl(){
    var r = document.getElementsByClassName('gotowebinar-required').length;
    for (var i = 0; i < r; i++){
        console.log(r);
        var x = document.getElementsByClassName('gotowebinar-required')[i];
        var w = document.getElementsByClassName('gotowebinar-required')[i].innerHTML;
        var y = x.innerHTML;
        var p = '<span style="font-weight: bold;"class="label_1">';
        var q = '</span>';
        x.innerHTML = p+w+q;
    };
};
changeEl();

有一些很好的答案可以解释为什么代码不起作用。我想向您展示如何将其包装成一个很好的可重用方法,而不是添加这些内容

常数 defaultPlaceholder='{{text}}'; /** *将与选择器匹配的元素的内部HTML包装到另一个HTML结构中。 * *@param{String}选择器与要更改的项目匹配的有效CSS选择器。 *@param{String}模板HTML结构的字符串表示形式,其中 *应放置匹配元素的innerHTML。 *@param{String}占位符模板内的字符串,该字符串应替换为 *匹配元素的内部HTML。如果未提供任何值,则 *将有替换{{text}}。 */ 函数wrapinnertmlselector,模板,占位符=默认占位符{ 常数 //在DOM中查找与选择器匹配的元素,并将节点列表转换为数组。 elements=Array.fromdocument.querySelectorAllselector; //迭代元素 elements.forEachelement=>{ 常数 //通过替换模板中的占位符来创建新的内部HTML字符串。 newInnerHTML=template.replacep占位符,element.innerHTML; //用新内容替换元素的内部HTML。 element.innerHTML=newInnerHTML; }; } wrapInnerHTML'.GoTowBinar必需','{{text}}}'; 我想选择加入以接收来自的未来通信
它运行时没有语法错误。这和罚款不一样。通过类名称使用元素的返回值是毫无意义的。@Quentin OP问为什么会有语法错误,代码以前根本没有运行过。它现在运行,不知道为什么我会被downvotedvar b=m+I+n;这就是为什么有一个b,所以我可以得到像[I],所以它将是[0],因为I=0。我尽了最大的努力来展示我的代码,除此之外,我不知道如何格式化它,我仍然是一个新手。你是一个英雄!然而,这显示了未捕获的TypeError:无法读取changeEl:6:75 at:13:1处未定义的属性'innerHTML',你能告诉我吗,我只是担心这个错误会破坏其中的某些内容。抱歉@user354355我忘记删除了我添加了一些注释来更好地解释发生了什么。
var x = document.getElementsByClassName('gotowebinar-required')b;
var w = document.getElementsByClassName('gotowebinar-required')b.innerHTML;
var m = '[';
var n = ']';
var b =  m+i+n;
var x = document.getElementsByClassName('gotowebinar-required')b;
var x = document.getElementsByClassName('gotowebinar-required')[i];
for (var i = 0; i <= r; i++){
function changeEl(){
    var r = document.getElementsByClassName('gotowebinar-required').length;
    for (var i = 0; i < r; i++){
        console.log(r);
        var x = document.getElementsByClassName('gotowebinar-required')[i];
        var w = document.getElementsByClassName('gotowebinar-required')[i].innerHTML;
        var y = x.innerHTML;
        var p = '<span style="font-weight: bold;"class="label_1">';
        var q = '</span>';
        x.innerHTML = p+w+q;
    };
};
changeEl();