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

时间:2013-02-18 22:48:19

标签: jquery

我正在尝试通过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')出了什么问题?

2 个答案:

答案 0 :(得分:9)

我认为这里的主要问题是div元素默认情况下没有name属性(请参阅Global attributes)。如果您要在input元素上执行原始JavaScript代码,则可能会有效,因为input元素具有name属性。

jQuery的.attr()方法甚至可以解析非标准属性(example)。

jQuery的.prop()方法主要用于checkeddisabled等属性,因此在任何情况下使用.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进行比较。

我很抱歉这么强调“财产”。我只想弄清楚属性和属性之间的区别。您可以在元素上设置其他属性,而属性是元素类型固有的。