首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >此名称$( JQuery ).attr(“this.name”)与this.name

此名称$( JQuery ).attr(“this.name”)与this.name
EN

Stack Overflow用户
提问于 2014-04-17 18:01:21
回答 2查看 36.3K关注 0票数 16

两者的主要区别是什么?

代码语言:javascript
运行
复制
$(this).attr("name")

代码语言:javascript
运行
复制
this.name

技术上的解释是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-04-17 18:03:32

第一个方法从DOM元素形成的jQuery对象中获取属性值。第二种方法直接从DOM元素获取属性,因此速度更快。您应该在可能的情况下使用本机属性。

票数 18
EN

Stack Overflow用户

发布于 2014-04-17 19:15:40

我知道你一定在想..。这是性能问题..。但不是。这是一个可靠性问题。

当您通过javascript访问DOM时,您不能直接访问DOM,您得到的是一个接口,该接口由W3C的HTML规范定义。

http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-798055546

HTMLElement接口仅定义此属性。

代码语言:javascript
运行
复制
interface HTMLElement : Element {
    attribute DOMString       id;
    attribute DOMString       title;
    attribute DOMString       lang;
    attribute DOMString       dir;
    attribute DOMString       className;
};

因此,您将能够在其接口定义了属性“”(最可能是输入)的那些元素上调用"this.name“

这段简单的代码将让您了解可能会出错的地方。

代码语言:javascript
运行
复制
<a fakeAttr="Hola" id="myAnchor" data-mytext="Anyone?">Link</a>


$(function(){

  /* This gives you undefined */
  alert('Direct access: ' + $('#myAnchor')[0].fakeAttr);

  /* This gets the work done */
  alert('jQuery access: ' + $('#myAnchor').attr('fakeAttr'));

  $('#myAnchor').click(function(){

     /* This is of course empty */
     alert(this.fakeAttr);
  });
});    

http://jsbin.com/ganihali/1/edit

浏览器如何构建javascript-DOM代理对象可能会有所不同...IE过去对开发人员更友好,解析DOM中的所有内容,然后将其作为可供使用的对象属性提供给开发人员。但那是史前时代,现在没有浏览器会给你提供自定义属性。甚至不是数据属性(HTML5有效)。

因此,我会非常小心地让我的快速、容易出错的属性访问,并使用框架(这是有原因的)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23130087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档