[英]for loop in document.getElementsByName in HTML
我正在嘗試使用以下Javascript代碼通過elementName訪問每個節點:
function myFunction() { var h1 = document.getElementsByName("demoNode"); for (var i = 0; i < h1.length; i++) { if (h1[i].name == "demoNode") { var att = h1[i].createAttribute("class"); att.value = "democlass"; h1[i].setAttributeNode(att); } } }
.democlass { color: red; }
<h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
該代碼應將標題文本着色為紅色。 但這似乎對我不起作用。 你能讓我知道為什么嗎? 這是jsfiddle的演示鏈接
h1[i].getAttribute("name")
h1[i].setAttribute("class","democlass")
另外,您不需要if條件,因為要獲取的元素已經在使用name了。
function myFunction() { var h1 = document.getElementsByName("demoNode"); for (var i = 0; i < h1.length; i++) { h1[i].setAttribute("class", "democlass"); } }
.democlass { color: red; }
<h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
除了for loop
您還可以使用map
:
但是首先我們需要將NodeList的實例轉換為數組,因為document.getElementsByName
返回了nodelist。
function myFunction() { var h1 = document.getElementsByName("demoNode"); Array.prototype.map.call(h1, (key) => key.setAttribute('class','democlass')) }
.democlass { color: red; }
<h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
正如標記了jQuery一樣,我創建了一個jQuery代碼段,該代碼段與您要執行的操作相同。 這樣做的好處是不需要定義myFunction
,並且一般來說它的代碼更少。 這是jsFiddle
jQuery的
$("document").ready(function () {
$("button").click(function () {
$("[name='demoNode']").each(function (elem) {
$(this).addClass("democlass");
});
});
});
首先,您的代碼包含少量語法錯誤。
您不能僅使用來檢索或設置元素的屬性.
。 所以下面的代碼是錯誤的h1[i].name
,它應該像這樣:
var val = h1[1].getAttribute("name");
or
h1[1].setAttribute("name", "value");
另外一個是您不需要創建class屬性,因為它是原始屬性,它總是包含在每個元素中。 因此,您只需為其分配類名即可。
function myFunction() { var h1 = document.getElementsByName("demoNode"); for (var i = 0; i < h1.length; i++) { h1[i].setAttribute("class", "democlass"); } }
.democlass { color: red; }
<h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
您還可以使用HTMLElement的屬性classList及其方法add。 https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
function myFunction() { var h1 = document.getElementsByName("demoNode"); for (var i = 0; i < h1.length; i++) { h1[i].classList.add('democlass'); } }
.democlass { color: red; }
<!DOCTYPE html> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
而且,您需要在JSFiddle中為JS選擇負載類型“ In head”,以使功能可用。 https://jsfiddle.net/8s5fw33e/
正如其他人所說,檢查是多余的。
首先,用於檢查屬性名稱值的if
條件為false。 要獲取屬性值,請使用getAttribute("attribute_name")
。 第二部分無效,是h1[i].createAttribute()
function myFunction() { var h1 = document.getElementsByName("demoNode"); for (var i = 0; i < h1.length; i++) { if (h1[i].getAttribute("name") == "demoNode") { var att = document.createAttribute("class"); att.value = "democlass"; h1[i].setAttributeNode(att); } } } //myFunction();
.democlass { color: red; }
<h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <h1 name="demoNode">Hello World</h1> <p>Click the button to create a "class" attribute with the value "democlass" and insert it to the H1 element above.</p> <button onclick="myFunction()">Try it</button>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.