回答
有時該屬性不映射到屬性中的更改。
一個示例是複選框的checked
屬性/屬性。
DEMO:http://jsfiddle.net/mxzL2/
<input type="checkbox" checked="checked"> change me
document.getElementsByTagName('input')[0].onchange = function() {
alert('attribute: ' + this.getAttribute('checked') + '\n' +
'property: ' + this.checked);
};
...而一個ID屬性/特性將保持同步:
DEMO:http://jsfiddle.net/mxzL2/1/
<input type="checkbox" checked="checked" id="the_checkbox"> change me
var i = 0;
document.getElementsByTagName('input')[0].onchange = function() {
this.id += ++i;
alert('attribute: ' + this.getAttribute('id') + '\n' +
'property: ' + this.id);
};
和自定義屬性一般不映射的。在這些情況下,您需要獲取該屬性。
也許一個潛在更有用的情況是文本輸入。
<input type="text" value="original">
...其中屬性不會隨着來自DOM或用戶的更改而改變。
正如@Matt McDonald指出,有DOM屬性會給你會反映原始屬性值的初始值。
HTMLInputElement.defaultChecked
HTMLInputElement.defaultValue
一個罕見的例外情況是<form>
元素的屬性可能與表單中的元素衝突。例如,考慮下面的HTML:
<form id="theForm" method="post" action="save.php">
<input name="action" value="edit">
</form>
的問題是,一種形式內的任何輸入創建對應於所述輸入的name
形式元件,覆蓋該屬性的任何現有值的屬性。因此,在這種情況下,表單元素的action
屬性是對名稱爲action
的<input>
元素的引用。如果該輸入不存在,action屬性將改爲參考action
屬性幷包含字符串「save.php」。因此,對於屬性對應的表單元素的屬性,例如action
和method
,使用getAttribute()
是最安全的。
var form = document.getElementById("theForm");
// Alerts HTMLInputElement in most browsers
alert(form.action);
// Alerts "save.php"
alert(form.getAttribute("action"));
// Alerts "post" because no input with name "method" exists
alert(form.method);
這是不幸的;如果這種映射不存在,本來會更好,因爲表單的elements
屬性已包含由name
加密的所有表單元素。我認爲我們有Netscape爲此感謝。
現場演示:http://jsfiddle.net/z6r2x/
等場合使用屬性:
- 當訪問自定義屬性,如
<div mymadeupattr="cheese"></div>
- 當序列化DOM和你想從原始的HTML輸入屬性值如
value
和checked
。
+1「這個答案很有用(再次點擊可以撤銷)」謝謝,這是豐富的。 –
此映射是Netscape爲加快JavaScript的採用而製作的JavaScript 1.1(Netscape 3.0)中的錯誤之一:該語言應該易於使用。競爭和向後兼容性則要求在MSHTML和後來的DOM實現中具有相同的映射。因此,這裏的經驗法則是:1.不要將控件命名爲表單對象屬性;例如,從來沒有名稱爲「動作」或「提交」。 2.不要爲元素創造新的屬性(除非它是XHTML,並且你知道你在做什麼)。 3.永遠不要增加主對象,如元素對象。 – PointedEars
@PointedEars:完全確認,如你所說。很高興在Stack Overflow上看到你。請溫柔:) –
我只能想出2個更多的情況下訪問/設置屬性將有益於 超過財產。
風格屬性:
在您不允許使用任何框架,你可以使用樣式屬性一次像這樣設置多種樣式的情況下:
elem.setAttribute("style", "width:100px;height:100px;");
而不是做這樣的:
elem.style.width = "100px";
elem.style.height = "100px";
或本:
var styles = {width: "100px", height: "100px"}, style;
for(style in styles) {
elem.style[style] = styles[style];
}
請注意,設置樣式屬性會覆蓋前一個屬性。不管怎樣,它可能更好地寫出 多重樣式setter函數。
href屬性:
href屬性通常會包括類似「/產品」的值,但是屬性將包含解析網址,如: 「http://www.domain.com/products」,而不是你真正想要的: 「/產品」。所以如果你想動態地使用 鏈接來做點什麼,那麼閱讀href屬性而不是屬性會更好,因爲它具有你想要的值。
更新
我突然發現2種更多的用途,我相信有更多這樣的。
如果要查看某個元素是否具有自定義選項卡索引集,最簡單的方法是查看該元素是否具有該屬性。由於.tabIndex
-property的默認值 取決於元素,因此無法輕易使用該元素查看元素是否具有自定義tabIndex。
查看元素是否具有自定義.maxLength
屬性。這不能從物業看出之一:
document.createElement("input").maxLength
//524288
這是不可能告訴當值524288
在那裏故意不處理的屬性。
'elem.setAttribute(「style」,「width:100px; height:100px;」)'不適用於舊版IE或更新版本的兼容模式,所以我會避免使用網頁。 –
- 1. 訪問屬性
- 2. 訪問屬性
- 3. 訪問屬性
- 4. 訪問屬性
- 5. 訪問屬性
- 6. 訪問屬性
- 7. 訪問屬性
- 8. 訪問屬性
- 9. 訪問屬性
- 10. 訪問屬性
- 11. 訪問屬性
- 12. 訪問屬性
- 13. 訪問屬性
- 14. 訪問屬性
- 15. 屬性訪問
- 16. 訪問屬性
- 17. 訪問屬性
- 18. 訪問屬性
- 19. 訪問屬性
- 20. 屬性值VS屬性值
- 21. Xml屬性vs Xml屬性?
- 22. 訪問修飾符VS屬性
- 23. DependencyObject SetValue vs屬性訪問器
- 24. 在DataBinding中訪問屬性的屬性
- 25. 訪問其他屬性在屬性角
- 26. 屬性內的訪問屬性
- 27. 使用屬性訪問屬性值
- 28. 訪問GTLPlusActivity屬性
- 29. 訪問類屬性
- 30. 訪問塊屬性
好的。但爲什麼這很有用?看來這裏的財產是重要的。 – Randomblue
@Randomblue:只有當你需要獲得原始價值。我認爲這不是一個普遍的情況。 – user113716
......你確實要求*「罕見例外」*對嗎? ;) – user113716