jQuery 获取元素名称 - prop('name') 或 attr('name')



我正在尝试通过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()方法主要用于checkeddisabled等属性,因此在任何情况下,使用.attr()都可能是最好的做法。

例如,输入元素具有name属性。div不具有name属性,因为这不是div的固有属性。我凑在一起解释了其中的区别。http://jsfiddle.net/c7qDC/

添加name="foo1"时,它会为元素设置一个附加属性。然而,input具有名为name的固有属性

请参阅有关输入元素的文档,了解它们具有的属性

并将其与div.的文档进行比较

我很抱歉这么强调"财产"。我只是想说明一个属性和一个属性之间的区别。您可以在元素上设置其他属性,而特性是元素类型固有的。

最新更新