jQuery 创建元素 - 另一个 .attr() 与 .prop() 问题

发布于 2024-11-05 15:40:56 字数 539 浏览 0 评论 0原文

可能的重复:
.prop() 与 .attr()

鉴于新的 .prop() jQuery 方法,这是创建的首选方法具有特定字段的新元素,例如链接:

  1. $('').prop('href', '...');
  2. $('; ').attr('href', '...');
  3. $('');

我一直倾向于使用#2,但不清楚放入 DOM 中的元素现在是否不应该使用#1。

Possible Duplicate:
.prop() vs .attr()

Given the new .prop() method in jQuery, which is the preferred way to create a new element with particular fields, e.g. a link:

  1. $('<a>').prop('href', '...');
  2. $('<a>').attr('href', '...');
  3. $('<a href="...">');

I've always tended to use #2, but it's unclear whether a new element being put in the DOM shouldn't now use #1 instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苹果你个爱泡泡 2024-11-12 15:40:56

在这种情况下我会选择attr()。您正在创建一个新的 元素并设置其 href HTML 属性,因此强调这一点是有意义的。

但是,由于 href 属性直接映射到 href DOM 属性,因此使用 prop() 将获得完全相同的结果。

让我们举另一个例子,与 attr()prop() 之间的差异更相关:假设您要设置 元素而不是其 href。您问题中的示例代码变为:

  1. $('').prop('className', '...');
  2. $('') .attr('class', '...');
  3. $('');

恕我直言,(2) 和 ( 3)使自己的意图比(1)更清楚。事实上,不能有名为 class 的 DOM 属性,因为该标记可能是宿主语言中的保留字,这充其量只是一个实现细节。 class HTML 属性通常是我们在该上下文中考虑的内容。

当然,在某些情况下,情况恰恰相反,例如使用“布尔”HTML 属性(例如 checkeddisabled)时。在这种情况下,设置强类型 DOM 属性而不是创建定义不太明确的 HTML 属性会更加稳健。

I would go with attr() in that case. You're creating a new <a> element and setting its href HTML attribute, so it would make sense to emphasize that.

However, since the href attribute directly maps to the href DOM property, using prop() would have the exact same result.

Let's take another example, more relevant to the differences between attr() and prop(): suppose you want to set the class attribute of the <a> element instead of its href. The sample code in your question becomes:

  1. $('<a>').prop('className', '...');
  2. $('<a>').attr('class', '...');
  3. $('<a class="...">');

IMHO, (2) and (3) make one's intent clearer than (1). The fact that there cannot be a DOM property named class, because that token might be a reserved word in the host language, is at best an implementation detail. The class HTML attribute is usually what we're thinking about in that context.

Of course, there are situations where the opposite is true, e.g. when working with "boolean" HTML attributes like checked or disabled. In that case, it would be more robust to set the strongly-typed DOM property instead of creating the less well-defined HTML attribute.

情未る 2024-11-12 15:40:56

我通常会像这样创建 a 标签:

$('<a>', {href: '...'});

在开头向元素添加尽可能多的属性。 (是的属性,而不是属性)

因此您可以对输入之类的项目执行相同的操作:

      $('<input>',{
                name: 'some_name',
                id: 'some_id',
                value: item_value,
                readonly: 'true',
                style: 'background: #eee;',
                size: 15
            });

或实际的div:

      $('<div>',{
                id: 'some_id',
                text: 'this will be inside the div'
            });

这是一个小提琴示例:http://jsfiddle.net/maniator/mbjgd/

编辑
从我下面的评论来看:

这样做的原因是因为当您创建项目时,您是通过设置它的属性来创建它的,稍后当这些属性被诸如 javascript 之类的东西更改时就变得毫无意义,所以此时您必须使用对象的属性以获得您可能正在寻找的真正解决方案。

I usually would create the a tag like so:

$('<a>', {href: '...'});

Adds as many attributes to the element at the start. (yes attributes, not properties)

So you can do the same thing for items like inputs:

      $('<input>',{
                name: 'some_name',
                id: 'some_id',
                value: item_value,
                readonly: 'true',
                style: 'background: #eee;',
                size: 15
            });

Or actual divs:

      $('<div>',{
                id: 'some_id',
                text: 'this will be inside the div'
            });

Here is a fiddle example: http://jsfiddle.net/maniator/mbjgd/

EDIT
From my comment below:

The reason for this is because when you create the item, you are creating it by setting it's attributes, later on those attributes become meaningless when they are changed by something like javascript, so at that point you have to use the object's properties to get the real solution that you might be looking for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文