我想为数组拼接创建一个jquery插件(与push()
函数相对)。但是我得到错误
Uncaught TypeError: allfiles.pull is not a function
这是我的代码:
$.fn.pull = function (index) {
this.splice(index-1,1);
}
var allfiles = ['1','2','3','4','5'];
$("div").html(allfiles);
allfiles.pull(1);
$("div").html(allfiles);
.first:before{
content:'Before:';
}
.second:before{
content:'After:';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="first"></div>
<div class="second"></div>
答案 0 :(得分:0)
因为$.fn.pull
扩展了jQuery函数列表,所以它不会向对象Array
添加方法。要做到这一点Array.prototype.pull
。您的原始代码Array.pull
(allfiles.pull
)是undefined
,因为您从未声明过它。
我已经更改了代码并将数组包装成jQuery函数:$(allfiles)
。这应该可以满足您的需求。
$.fn.pull = function (index) {
this.splice(index-1,1);
return this.toArray();
}
var allfiles = ['1','2','3','4','5'];
$("div.first").html(allfiles);
allfiles = $(allfiles).pull(1);
$("div.second").html(allfiles);
.first:before{
content:'Before:';
}
.second:before{
content:'After:';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="first"></div>
<div class="second"></div>
Stack.pototype.pull的堆栈片段(未推荐*)
Array.prototype.pull = function (index) {
return this.splice(index-1,1);
}
var allfiles = ['1','2','3','4','5'];
$("div.first").html(allfiles);
allfiles.pull(1);
$("div.second").html(allfiles);
.first:before{
content:'Before:';
}
.second:before{
content:'After:';
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="first"></div>
<div class="second"></div>
*不建议使用自定义函数更改JavaScript的原始对象,例如
Array
。行为可以改变,或者像jQuery这样的外部脚本可以依赖相同的名称。pull
非常通用。至少使用目标名称myproject_pull
。