私はJavaScriptを使用して(すべての種類の)ページ上の要素を読み、必要に応じてそれらを変更しています。要素の1つを変更するときは、変更したことを示すマーカーを残しておきます。その後、ページ上の要素を読み通すことができ、そのマーカーを見つけた場合、それが変更した要素の1つであることがわかり、復元できます。これが私のために働いているコードですが、私がしていることではなく、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ホストオブジェクトにプロパティを追加すると、反映は逆になりません(HTML属性に対して)。これが私が欲しいものです。非表示にしたすべての要素に突然wasHiddenByMe="true"属性が表示されることは望ましくありません(メリットはありますが、わかります)。