以下两种用法有什么区别?
document.getElementById('myRadio').checked = "checked";
和
document.getElementById('myRadio').checked = true;
对我来说,两者的行为方式相同。但是,我只是想知道为什么存在两种方法可以做到这一点。
哪一个是理想的用法?我需要支持IE7及更高版本。
以下两种用法有什么区别?
document.getElementById('myRadio').checked = "checked";
和
document.getElementById('myRadio').checked = true;
对我来说,两者的行为方式相同。但是,我只是想知道为什么存在两种方法可以做到这一点。
哪一个是理想的用法?我需要支持IE7及更高版本。
document.getElementById('myRadio').checked
是一个布尔值。它应该是true
或false
document.getElementById('myRadio').checked = "checked";
将字符串转换为布尔值,这是真的。
document.getElementById('myRadio').checked = true;
只需分配true
而不进行强制转换。
使用true
它的效率稍微高一些,并且更能向维护者透露意图。
该元素同时具有一个属性和一个名为 的属性checked
。该属性确定当前状态。
属性是字符串,属性是布尔值。从 HTML 代码创建元素时,从标记设置属性,并根据属性的值设置属性。
如果标记中的属性没有值,则属性变为null
,但属性始终为true
或false
,因此变为false
。
设置属性时,应使用布尔值:
document.getElementById('myRadio').checked = true;
如果设置属性,则使用字符串:
document.getElementById('myRadio').setAttribute('checked', 'checked');
请注意,设置属性也会更改属性,但设置属性不会更改属性。
另请注意,无论您将属性设置为什么值,该属性都会变为true
. 即使您使用空字符串 or null
,设置属性也意味着它已被检查。用于removeAttribute
取消选中使用属性的元素:
document.getElementById('myRadio').removeAttribute('checked');
原始checked
属性(HTML 4 及之前)不需要值 - 如果存在,则元素被“检查”,如果不存在,则不是。
然而,这对于遵循 HTML 4 的 XHTML 无效。
该标准建议checked="checked"
用作 true 的条件 - 因此您发布的两种方式最终都会做同样的事情。
使用哪一种并不重要——使用对您最有意义的一种并坚持下去(或与您的团队达成一致意见)。
document.getElementById('myRadio')
返回您的 DOM 元素,我将elem
在此答案中引用它。
elem.checked
访问名为DOM 元素的属性。checked
此属性始终为布尔值。
在编写 HTML 时,您checked="checked"
在 XHTML 中使用;在 HTML 中,您可以简单地使用checked
. 设置属性时(通过 完成.setAttribute('checked', 'checked')
),您需要提供一个值,因为某些浏览器认为空值不存在。
但是,由于您拥有 DOM 元素,因此没有理由设置属性,因为您可以简单地使用 - 更舒服 - 布尔属性。true
由于在布尔上下文中考虑非空字符串,因此设置elem.checked
为'checked'
或任何其他不是虚假值(偶数'false'
或'0'
)的值将选中该复选框。没有理由不使用true
,false
因此您应该坚持使用正确的值。
checked
属性是一个布尔值,因此除布尔"checked"
值之外的其他值转换为."string"
false
true
任何字符串值都将为真。属性的存在也使它成为真的:
<input type="checkbox" checked>
您可以只使用 JS 在 DOM 中进行布尔更改。
所以答案是:他们是平等的。