JQuery $(this).attr("name") vs this.name
JQuery $(this).attr("name") vs this.name
之间的主要区别是什么
$(this).attr("name")
和
this.name
技术解释是什么?
第一个从由DOM元素形成的jQuery对象中获取属性值。第二个直接从DOM元素获取属性,因此速度更快。您应该尽可能使用本机属性。
我知道你一定在想。。。这是一个性能问题。。。但不是。这是一个可靠性问题。
当你通过javascript访问DOM时,你不能直接访问DOM,你得到的是一个由W3C的HTML规范定义的接口。
http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-798055546
HTMLElement接口仅定义此属性。
interface HTMLElement : Element {
attribute DOMString id;
attribute DOMString title;
attribute DOMString lang;
attribute DOMString dir;
attribute DOMString className;
};
因此,对于那些接口定义了属性"name"(很可能是输入)的元素,您只能调用"this.name"。
这个简单的代码将让您了解可能出错的地方。
<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
浏览器构建JavaScriptDOM代理对象的方式可能会有所不同。。。IE过去对开发人员更友好,可以解析DOM中的所有内容,然后将其作为现成的对象属性提供给开发人员。但那是史前时代,现在没有浏览器会给你自定义属性。甚至没有数据属性(HTML5有效)。
因此,我会非常小心地让我轻松快速地访问属性并使用框架(这是有原因的)。
相关文章:
- 铬:“;未捕获的语法错误:意外的标记:"
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- 使用“+="操作人员
- //而不是在src=“”上使用http://"属性
- "未捕获的语法错误:意外的标记}"
- 可以<脚本类型=“;text/javascript”>window.location=“/"</
- "实例范围”;TypeScript类的getter/setter
- Javascript复选框函数:;缺少:在属性id之后"
- 未捕获的类型错误:无法读取属性'name'即使它存在,也无法定义
- "“;变量未引用正确的对象
- 正在检测导航到<a name=“;最新主题”></a>
- "日期“;AJAX请求返回的类型值未定义
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- <输入类型=“;提交”;name=“;提交”;值=“;提交”;class=“;bt提交"onclick=
- 将表单字段(..name="array1[]")传递给Javascript函数,并更改其他表单字段(.
- jQuery:生成"name”;动态属性数组
- (美元).attr(“name");只对第一个元素有效