我在监视/尝试回答常见的 jQuery 问题时注意到,有一些使用 javascript 而不是 jQuery 的做法,实际上可以让你 写得更少,做......同样数量。并且还可能产生性能优势。
一个具体的例子
$(this)对比this
$(this)
this
在引用单击对象 id 的单击事件中
jQuery
$(this).attr("id");
Javascript
this.id;
还有其他类似的常见做法吗?可以更轻松地完成某些 Javascript 操作,而无需将 jQuery 混入其中。或者这是一个罕见的案例?(实际上需要更多代码的 jQuery“快捷方式”)
编辑: 虽然我很欣赏有关 jQuery 与普通 javascript 性能的答案,但我实际上正在寻找更多定量的答案。 在使用 jQuery 时,使用纯 javascript 而不是使用$(). 除了我在原始问题中给出的示例之外。
$()
this.id
this.value
<select>
value
<option>
this.className
this.selectedIndex
this.options
this.text
this.rows
<table>
<tr>
this.cells
this.parentNode
this.checked
checkbox
this.selected
option
this.disabled
input
this.readOnly
this.href
<a>
href
this.hostname
this.pathname
this.search
this.src
src
…我想你应该已经明白了。
有时性能至关重要。就像您在循环中多次执行某项操作一样,您可能想要放弃 jQuery。
一般来说,您可以替换:
$(el).attr('someName');
和:
上面的措辞不好。getAttribute不是替换,但它确实检索从服务器发送的属性的值,并且其对应的setAttribute将设置它。在某些情况下是必要的。
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]);
while
while(spans[0])``parent.removeChild(span[0]);