我应该使用setAttribute向元素添加属性吗?

时间:2012-05-31 12:42:21

标签: javascript setattribute getattribute

我正在阅读使用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
    }
}

问题是,我应该为我的wasModifiedByMe布尔值和我的origViz属性使用setAttribute和getAttribute吗?我目前不相信我需要为我自己添加的属性使用属性函数。

在下面的线程讨论之后,我尝试了这个测试:

<!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 dev工具的elements选项卡中,我看到mydiv将publicproperty属性显示为div的一部分。但它并没有显示出秘密属性。

就像我想的那样。使用setAttribute设置一个也反映在javascript对象中的HTML属性,但是当不使用setAttribute并向javascript主机对象添加属性时,反射不会反过来( TO HTML属性)。这就是我要的。我不希望我隐藏的每个元素突然显示一个wasHiddenByMe =“true”属性(尽管有这样的优点,我明白了)。

2 个答案:

答案 0 :(得分:2)

为了向HTML Elements添加属性,W3C标准为setAttribute。您无法将其用于 element .style。 property

但是,只需执行 element 。* attribute *设置属性即可。这不是一个真正的标准,因此使用setAttribute可能更好,但这取决于您的偏好。

答案 1 :(得分:2)

设置自己的DOM元素属性存在一些问题,由this article on perfectionkills.com覆盖。它讨论了扩展DOM元素原型,但是

部分

与您相关。但是,如果您知道这些问题我认为没问题 - 这是将自定义对象与DOM元素相关联的唯一方法。

如果您可以使用HTML5技术,还可以查看data attributes。对于简单的布尔标记,它们可能是更好的方法。