3

我正在尝试通过 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">到整个 DOM<html>并记录他们的名字。

预期结果是:

foo4
foo3
foo2
foo1
undefined
undefined

prop('name')返回 undefined whileattr('name')给出预期的名称。prop('name')上面的代码有什么问题?

4

2 回答 2

11

我认为这里的主要问题是div元素默认没有name属性(请参阅全局属性)。如果您要对input元素执行原始 JavaScript 代码,它可能会起作用,因为input元素具有name属性。

jQuery 的.attr()方法甚至能够解析非标准属性(示例)。

jQuery 的.prop()方法主要用于诸如checked和之类的属性disabled,因此.attr()无论如何使用可能是最好的做法。

于 2013-02-18T23:03:26.763 回答
5

例如,输入元素具有 name 属性。divs 没有属性of,name因为那不是 a 的固有属性div。我扔了一个小提琴来解释其中的区别。http://jsfiddle.net/c7qDC/

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

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

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

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

于 2013-02-18T23:03:45.640 回答