-->

我应该使用的setAttribute将属性添加到一个元素?(Should I use setAttr

2019-10-16 19:07发布

我读通过页面(各种)使用JavaScript的元素,如果需要修改它们。 当我做修改的内容之一,我要离开一个标志背后说我修改了它。 后来的后来,我可以通过页面上的元素阅读,如果我发现标记,我知道这是我修改的元素之一,可将其还原。 下面是的工作对我的代码,但有人建议我应该使用的setAttribute和的getAttribute,而不是我在做什么:

//hide some elements, after first leaving a marker and saving orig. val
for(var i=0; i<elements.length; i++) {
    if(should_i_hide_this_element(elements[i])) {    //external logic unimportant

        elements[i].wasModifiedByMe = true;             //mark element as modified
        elements[i].origViz = elements[i].style.visibility; //save visibility val
        elements[i].style.visibility = "hidden";          //and give it a new val
    }
}

相应的代码来恢复元件值是这样的:

for(var i=0; i<elements.length; i++) {
    if(elements[i].wasModifiedByMe) {                 //This is one I modified
        elements[i].style.visibility = elements[i].origViz; //restore original val
        elements[i].wasModifiedByMe = false;          //mark as not modified now
    }
}

现在的问题是,我应该使用的setAttribute和的getAttribute我wasModifiedByMe布尔和我origViz属性? 我目前不认为我需要使用属性功能为我自己添加的属性。

继以下螺纹的讨论,我想这个测试:

<!doctype html>
<html>
<body>
<div id="mydiv">DIV</div>
<script>
var elem = document.getElementById("mydiv");
elem.secretproperty = "not_seen_in_elements_tab_in_chrome_dev_tools";
elem.setAttribute("publicproperty","is_visible_in_elements_tab");
</script>
</body>
</html>

而在Chrome浏览器开发工具的元素标签,我看到mydiv是表明公物属性作为DIV的一部分。 它没有显示secretproperty虽然。

这是我想的。 通过使用setAttribute是设置一个HTML属性,它也体现在JavaScript对象,而不是通过使用setAttribute和添加属性的JavaScript宿主对象时,反射不走另一条路( HTML属性)。 这就是我要的。 我不想每次我已经隐藏元素突然显示wasHiddenByMe =“true”属性(虽然有可取之处在于,我看到了)。

Answer 1:

有一些问题与设置您自己的DOM元素,所涵盖的性质这篇文章perfectionkills.com 。 它谈论扩展DOM元素的原型,但部分

  • 主机对象没有规则 ,
  • 碰撞的机会 (见也不要修改你不拥有的对象 )和
  • IE DOM是乱的

您相关的。 但是,如果你知道的问题,我认为这是确定 - 它是accociate到DOM元素自定义对象的唯一途径。

如果你可以使用HTML5技术,您还可以看看数据 属性 。 对于简单的布尔标志,他们可能是优越的方法。



Answer 2:

对于添加属性到HTML元素,W3C的标准setAttribute 。 你不能用它来element .style。 property

然而,简单地做设置属性element 。* attribute *仍然有效。 这只是不是一个真正的标准,所以它可能会更好地使用setAttribute ,不过主要还是根据自己的喜好。



文章来源: Should I use setAttribute to add properties to an element?