我正在閱讀頁面(各種)的元素與JavaScript和修改它們,如果需要的話。當我修改其中一個元素時,我想留下一個標記以表示我修改了它。然後,我可以通讀頁面上的元素,如果我找到了那個標記,我知道這是我修改過的元素之一,並且可以恢復它。下面是的工作對我的代碼,但有人建議我應該使用的setAttribute和的getAttribute,而不是我在做什麼:我應該使用setAttribute爲元素添加屬性嗎?
//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瀏覽器開發工具的元素標籤,我看到mydiv是表明公物屬性作爲DIV的一部分。雖然沒有顯示祕密特性。
這是我的想法。使用setAttribute設置HTML屬性,該屬性也反映在javascript對象中,但是如果不使用setAttribute並向javascript主機對象添加屬性,則反射不會以其他方式進行(TO HTML屬性)。這就是我要的。我不想讓我隱藏的每個元素突然顯示一個wasHiddenByMe =「true」屬性(雖然有這個優點,但我明白了)。
我的建議是爲此使用類,並根據類編寫CSS。班級的存在告訴你它是否被你修改過。 – kapa
很好的建議,但在這種情況下班級並不合適。我的代碼可以添加到ANY頁面,並在被要求時隱藏一些元素,並在稍後恢復。 – Dee2000
你仍然可以使用類,但是你可以保留'style.visibility'。 – kapa