在标记名称中创建新HTML属性的问题

时间:2019-02-07 06:06:08

标签: javascript html

我想在class='notranslate'中添加属性<pre>,以防止Google翻译<pre>标记中的内容。

我使用此JavaScript,并且可以正常工作。

<script type='text/javascript'>
//<![CDATA[
var pre = document.getElementsByTagName("PRE")[0];
var att = document.createAttribute("class");
att.value = "notranslate";
pre.setAttributeNode(att);
//]]>
</script>

但是有问题。那是JavaScript仅在第一个<pre>标记下起作用。

任何人都可以帮助我,如何在整个标签class='notranslate'中添加<pre>

谢谢你,对不起我的英语。

4 个答案:

答案 0 :(得分:1)

不要执行document.getElementsByTagName("PRE")[0];,它会为您提供第一个元素(这就是[0]的用途),但要使用循环。

document.getElementsByTagName("PRE").forEach(pre => {
  const att = document.createAttribute("class");
  att.value = "notranslate";
  pre.setAttributeNode(att);
});

答案 1 :(得分:0)

使用forEach迭代由getElementsByTagName返回的对象的值,并在循环中创建和附加属性

var pre = document.getElementsByTagName("PRE");

Object.values(pre).forEach((x)=>{
var att = document.createAttribute("class");
att.value = "notranslate";
x.setAttributeNode(att);
})
<pre>a</pre><pre>b</pre><pre>c</pre>

答案 2 :(得分:0)

它仅在第一个pre标签处起作用,因为您正在选择返回数组的第一个元素。

尝试

for (let pre of document.getElementsByTagName('pre')) {
    // ... your manipulation code
}

答案 3 :(得分:0)

通过添加[0]仅选择第一个元素。您需要遍历整个NodeList

您还可以使用classList.add防止破坏现有的类

Object.values(document.getElementsByTagName('pre'))
    .forEach(pre => pre.classList.add('notranslate'))