gpt4 book ai didi

通过 setAttribute 设置类时的 JavaScript 奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:00 24 4
gpt4 key购买 nike

我想通过 JS 在我的 html 代码的某些行上设置一个特定的类。在输出中,我有四行,第 1 行、第 2 行和第 4 行(以阿拉伯字符开头)应该受到影响并获得红色背景。但是很奇怪为什么二线没有受到类(class)的影响。我做错了什么吗?

<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>This is</title>
<style> .rtl {background: red;}</style>
</head>


<body>

<div class="chat-item__text">سلام</div>

<div class="chat-item__text">بله</div>

<div class="chat-item__text">koo</div>

<div class="chat-item__text">اینور</div>

<script>


function checkRtl( character )
{
var RTL = ['ا','ب','پ','ت','س','ج','چ','ح','خ','د','ذ','ر','ز','ژ','س','ش','ص','ض','ط','ظ','ع','غ','ف','ق','ک','گ','ل','م','ن','و','ه','ی'];
if( RTL.indexOf( character ) > -1)
{
return true;
} else
{
return false;
}

}

function init()
{
var chatText = document.getElementsByClassName("chat-item__text");
for (var i = 0; i < chatText.length; i++)
{
var eachLine = chatText[i].innerHTML;
var firstChar = eachLine.charAt(0);
console.log(firstChar);
if (checkRtl(firstChar))
{
chatText[i].setAttribute("class", "rtl");
}

}
}
window.onload = init;
</script>
</body>
</html>

提前致谢。

最佳答案

Document.getElementsByClassName() live HTMLCollection. The term Live could be explained as dynamic which is updated when DOM is updated.

所以在你的情况下,如果你调试,for-loop仅迭代 3setAttribute将取代 class元素,因此 lengthCollection会受到影响(减少)。

使用 document.querySelectorAll选择返回 NodeList 的元素并且不是直播

function checkRtl(character) {
var RTL = ['ا', 'ب', 'پ', 'ت', 'س', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی'];
return RTL.indexOf(character) > -1; //Could be simplified like this
}

function init() {
var chatText = document.querySelectorAll(".chat-item__text");
for (var i = 0; i < chatText.length; i++) {
var eachLine = chatText[i].innerHTML;
var firstChar = eachLine.charAt(0);
console.log(checkRtl(firstChar))
if (checkRtl(firstChar)) {
chatText[i].setAttribute("class", "rtl");
}
}
}
window.onload = init;
.rtl {
background: red;
}
<div class="chat-item__text">سلام</div>
<div class="chat-item__text">بله</div>
<div class="chat-item__text">koo</div>
<div class="chat-item__text">اینور</div>

Fiddle Demo

注意:如果您想要多个类,请使用 Element.classList.add()而不是 setAttribute()

关于通过 setAttribute 设置类时的 JavaScript 奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com