为对象创建jquery插件

时间:2017-07-01 12:39:16

标签: javascript jquery html javascript-objects

我想为数组拼接创建一个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>

1 个答案:

答案 0 :(得分:0)

因为$.fn.pull扩展了jQuery函数列表,所以它不会向对象Array添加方法。要做到这一点Array.prototype.pull。您的原始代码Array.pullallfiles.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