小编典典

何时使用 Vanilla JavaScript 与 jQuery?

all

我在监视/尝试回答常见的 jQuery 问题时注意到,有一些使用 javascript 而不是 jQuery 的做法,实际上可以让你
写得更少,做......同样数量。并且还可能产生性能优势。

一个具体的例子

$(this)对比this

在引用单击对象 id 的单击事件中

jQuery

$(this).attr("id");

Javascript

this.id;

还有其他类似的常见做法吗?可以更轻松地完成某些 Javascript 操作,而无需将 jQuery 混入其中。或者这是一个罕见的案例?(实际上需要更多代码的
jQuery“快捷方式”)

编辑: 虽然我很欣赏有关 jQuery 与普通 javascript 性能的答案,但我实际上正在寻找更多定量的答案。 在使用 jQuery
时,使用纯 javascript 而不是使用$(). 除了我在原始问题中给出的示例之外。


阅读 84

收藏
2022-05-23

共1个答案

小编典典

  • this.id(如你所知)
  • this.value(在大多数输入类型上。我知道的唯一问题是 IE,当 a<select>没有value在其<option>元素上设置属性或 Safari 中的无线电输入时。)
  • this.className获取或设置整个“类”属性
  • this.selectedIndex针对 a<select>获取选定的索引
  • this.options针对 a<select>获取<option>元素列表
  • this.text反对<option>获取其文本内容
  • this.rows针对 a<table>获取<tr>元素集合
  • this.cells反对 a<tr>得到它的细胞 (td & th)
  • this.parentNode获得直系父母
  • this.checked获得checkbox
  • this.selected获得option
  • this.disabled获得input
  • this.readOnly获得input
  • this.href反对一个<a>元素来获得它href
  • this.hostname针对一个<a>元素来获取其域href
  • this.pathname针对一个<a>元素来获取它的路径href
  • this.search针对一个<a>元素来获取它的查询字符串href
  • this.src针对一个有效的元素src

…我想你应该已经明白了。

有时性能至关重要。就像您在循环中多次执行某项操作一样,您可能想要放弃 jQuery。

一般来说,您可以替换:

$(el).attr('someName');

和:

上面的措辞不好。getAttribute不是替换,但它确实检索从服务器发送的属性的值,并且其对应的setAttribute将设置它。在某些情况下是必要的。

下面的句子涵盖了它。请参阅此答案以获得更好的治疗。

el.getAttribute('someName');

…为了直接访问属性。请注意,属性与属性不同(尽管它们有时相互镜像)。当然也有setAttribute

假设您收到一个页面,您需要解开某种类型的所有标签。使用 jQuery 很简单:

$('span').unwrap();  // unwrap all span elements

但如果有很多,你可能想做一点原生 DOM API:

var spans = document.getElementsByTagName('span');

while( spans[0] ) {
    var parent = spans[0].parentNode;
    while( spans[0].firstChild ) {
        parent.insertBefore( spans[0].firstChild, spans[0]);
    }
    parent.removeChild( spans[0] );
}

这段代码很短,它的性能比 jQuery 版本更好,并且可以很容易地在你的个人库中变成一个可重用的函数。

看起来我与外部有一个无限循环,while因为.
这是我们在使用数组(或类似数组的对象)时错过的一个非常漂亮的功能。while(spans[0])``parent.removeChild(span[0]);

2022-05-23