JQuery 选择器是否比 DOM 属性更安全?

Are JQuery selectors safer than DOM properties?

本文关键字:安全 属性 DOM 选择器 是否 JQuery      更新时间:2023-09-26

这两个表达式做同样的事情,但哪一个更安全或更有效?

var indexedCellValue = selectedCell.srcElement.parentElement.cells[index].innerText;
var indexedCellValue = $(selectedCell.srcElement).parent('tr').get(0).cells[index].innerText;

(获取单元格、选定单元格、父行和索引到该父行上的列。

纯 JavaScript 总是比 jQuery 快,但使用 jQuery,您可以确保代码可以在大多数浏览器中运行。

使用 jQuery,您只选择具有tr父元素的元素。我也认为纯javascript版本可以在Firefox 9+上运行,但不能在较旧的版本上运行。

在引擎盖下,如果你看看jQuery的源代码,在parent()的定义(第5666行,从版本1.9.0开始):

parent: function( elem ) {
    var parent = elem.parentNode;
    return parent && parent.nodeType !== 11 ? parent : null;
},

你看它不用parentElement,而是parentNode,那更受浏览器支持(主要是不是旧版的火狐,其实在版本9之前是不支持的,如果你想知道两者的区别,看这个答案:DOM parentNode和parentElement的区别)。

它还检查节点是否是DOCUMENT_FRAGMENT_NODE节点(坦率地说,我不知道为什么会这样,如果有人知道我会感兴趣的话)。

在不支持旧浏览器的 2.0 开发分支上(感谢 pimvdb),他们切换到 parentElement(减少遍历模块 - 提交):

parent: function( elem ) {
    return elem.parentElement;
},

这是一个优化的JQuery解决方案

var indexedCellValue = $($(selectedCell.srcElement).parent('tr').children()[index]).text();

不使用 parentElement、单元格或 innerText。

感谢您的帮助。