我正在尝试通过jquery-获取元素名称
请检查以下示例代码:(或http://jsbin.com/usujeq/2/watch)
<div name = "foo1">
<div name = "foo2">
<div name = "foo3">
<div name = "foo4">
<button id = "clickme" type="button">
</div></div></div></div>
<script type="text/javascript">
$('#clickme').click( function() {
$(this).parents().each( function() {
console.log($(this).prop('name'));
});
});
</script>
如果我单击clickme
,它应该会在整个DOM中从<div name="foo4">
到<html>
,并记录它们的名称。
预期结果是:
foo4
foo3
foo2
foo1
undefined
undefined
prop('name')
返回undefined,而attr('name')
给出期望的名称。上面代码中的prop('name')
有什么问题?
我认为这里的主要问题是默认情况下div
元素没有name
属性(请参阅全局属性)。如果您要在input
元素上执行原始JavaScript代码,它可能会起作用,因为input
元素具有name
属性。
jQuery的.attr()
方法甚至可以解析非标准属性(示例)。
jQuery的.prop()
方法主要用于checked
和disabled
等属性,因此在任何情况下,使用.attr()
都可能是最好的做法。
例如,输入元素具有name属性。div
不具有name
的属性,因为这不是div
的固有属性。我凑在一起解释了其中的区别。http://jsfiddle.net/c7qDC/
添加name="foo1"
时,它会为元素设置一个附加属性。然而,input
具有名为name
的固有属性。
请参阅有关输入元素的文档,了解它们具有的属性。
并将其与div.的文档进行比较
我很抱歉这么强调"财产"。我只是想说明一个属性和一个属性之间的区别。您可以在元素上设置其他属性,而特性是元素类型固有的。