1

私は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"属性が表示されることは望ましくありません(メリットはありますが、わかります)。

4

2 に答える 2

2

HTML要素に属性を追加する場合、W3C標準はsetAttributeです。element.styleには使用できません。property

ただし、element。**を実行するだけで属性を設定することはできますattribute。これは実際の標準ではないため、使用する方がよい場合がありますsetAttributeが、これは好み次第です。

于 2012-05-31T12:50:53.543 に答える
2

perfectionkills.comのこの記事で取り上げられている、DOM要素の独自のプロパティの設定にはいくつかの問題があります。DOM要素のプロトタイプの拡張について説明していますが、セクション

あなたに関連しています。それでも、問題を認識している場合は問題ないと思います。カスタムオブジェクトをDOM要素に関連付ける唯一の方法です。

HTML5の手法を使用できる場合は、データ 属性も確認できます。単純なブールマーカーの場合、それらは優れたアプローチである可能性があります。

于 2012-05-31T13:08:34.383 に答える