javascript - 为什么要将现有的 jQuery 类“removeClass”传递给 IIFE?
问题描述
我刚开始学习 JQuery,我从 Codepen 看到的这部分编码让我很困惑
jQuery.fn.removeClass = function( value ) {
if ( value && typeof value.test === "function" ) {
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
if ( elem.nodeType === 1 && elem.className ) {
var classNames = elem.className.split( /\s+/ );
for ( var n = classNames.length; n--; ) {
if ( value.test(classNames[n]) ) {
classNames.splice(n, 1);
}
}
elem.className = jQuery.trim( classNames.join(" ") );
}
}
} else {
removeClass.call(this, value);
}
return this;
}
})(jQuery.fn.removeClass);
为什么要传递 jQuery 中现有的类“jQuery.fn.removeClass”?
解决方案
此函数扩展了默认jQuery.removeClass()
方法,因此它接受 RegExp 作为输入:
// case insensitive
$('span').removeClass(/removeme/i);
[class*="me"i] {
color: red;
}
span {
display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="removeme">should be black</span>
<span class="RemoveMe Too">should be black</span>
<span class="removeMeAlso">should be black</span>
<span class="notMe">should be red</span>
<script>
(function(removeClass) {
jQuery.fn.removeClass = function(value) {
if (value && typeof value.test === "function") {
for (var i = 0, l = this.length; i < l; i++) {
var elem = this[i];
if (elem.nodeType === 1 && elem.className) {
var classNames = elem.className.split(/\s+/);
for (var n = classNames.length; n--;) {
if (value.test(classNames[n])) {
classNames.splice(n, 1);
}
}
elem.className = jQuery.trim(classNames.join(" "));
}
}
} else {
removeClass.call(this, value);
}
return this;
}
})(jQuery.fn.removeClass);
</script>
推荐阅读
- python - 我们如何为任意长度的输入训练深度学习模型?
- jquery - Bootstrap4 如何调整网格元素的引导类,但前提是网格发生故障?
- jquery - 选中了所有 Checkboxes 道具,但我只希望触发一个复选框
- arrays - 多维矩阵中的元素存储在哪个内存地址中?
- html - 如何正确获得移动页面缩放?
- drools - 处理与流口水的前向 1:n 关系
- vue.js - vue good table - 对服务的 3 个请求
- angular - 在 TestBed.createComponent() 之前监视组件方法
- python - 计算由给定浮点数近似的最短十进制数
- bash - 尝试从变量执行小脚本,正确的语法是什么?