jQuery获取元素名称 - prop('name')还是attr('name')?

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,而attr('name')则返回预期的名称。 那么prop('name')有什么问题呢?


@MikeHogan 不,是从所有的<div>中。 - thkang
这不是有效的HTML5:http://html5.validator.nu - Matt Ball
2个回答

12
我认为这里的主要问题在于默认情况下,div元素没有name属性(请参见全局属性)。 如果您对input元素执行原始JavaScript代码,那么它很可能会起作用,因为input元素有name属性。
jQuery的`.attr()`方法能够解析非标准属性(示例)。
jQuery的`.prop()`方法主要用于诸如checkeddisabled之类的属性,因此在任何情况下使用`.attr()`可能是最佳选择。

5

例如,输入元素有name属性。div没有name属性,因为这不是div的固有属性。我做了一个示例来解释这种差异。 http://jsfiddle.net/c7qDC/

当您添加name="foo1"时,它会将另一个属性设置为元素。而输入元素具有固有的名为name的属性。

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

然后与div的文档进行比较。

很抱歉过分强调“属性”。我只是想指出属性和属性之间的区别。您可以在元素上设置其他属性,而属性是元素类型固有的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接