我正在尝试通过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
,它应该从<div name="foo4">
到<html>
遍布整个DOM并记录其名称。
预期结果是:
foo4
foo3
foo2
foo1
undefined
undefined
prop('name')
返回undefined,attr('name')
给出预期的名称。
上面的代码中prop('name')
出了什么问题?
答案 0 :(得分:9)
我认为这里的主要问题是div
元素默认情况下没有name
属性(请参阅Global attributes)。如果您要在input
元素上执行原始JavaScript代码,则可能会有效,因为input
元素具有name
属性。
jQuery的.attr()
方法甚至可以解析非标准属性(example)。
jQuery的.prop()
方法主要用于checked
和disabled
等属性,因此在任何情况下使用.attr()
都可能是最好的做法。
答案 1 :(得分:5)
例如,输入元素具有name属性。 div
没有name
的属性,因为它不是div
的固有属性。我把小提琴放在一起解释其中的差异。 http://jsfiddle.net/c7qDC/
添加name="foo1"
时,它会为元素设置其他属性。鉴于input
具有名为name
的固有属性。
See the documentation on input elements for the properties that they have
并将其与documentation for a div进行比较。
我很抱歉这么强调“财产”。我只想弄清楚属性和属性之间的区别。您可以在元素上设置其他属性,而属性是元素类型固有的。