我已将此代码实施到我的网站中(随机化/随机播放divs顺序):
function shuffle(array) {
var currentIndex = array.length
, temporaryValue
, randomIndex
;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
$.fn.randomize = function (childElem) {
return this.each(function () {
var $this = $(this);
var elems = shuffle($(childElem));
$this.remove(childElem);
for (var i = 0; i < elems.length; i++)
$this.append(elems[i]);
});
}
jQuery(function($){
$("div.container").randomize("div.random");
});
然而由于与其他脚本冲突,它无法工作,我假设$ .noConflict();是这样的。
这是小提琴,http://jsfiddle.net/7L4gu/我很难自己解决这个问题,我将非常感谢你的帮助!
答案 0 :(得分:2)
使用jQuery.noConflict()
时,您无法在$
块之外使用jQuery(function($){...}
。您需要将$.fn.randomize = ...
更改为jQuery.fn.randomize = ...
,或将函数定义放在jQuery
调用中。您还需要在$(this)
功能中将$(childelem)
和jQuery(this)
更改为jQuery(childelem)
和randomize
。
答案 1 :(得分:1)
因为noConflict(),一旦你使用它$
就不再引用jQuery了。在您调用$
后,noConflict()
未定义,因此表达式$.fn
将失败。
广泛使用的解决方案是使用IIFE之类的
(function ($) {
$.fn.randomize = function (childElem) {
return this.each(function () {
var $this = $(this);
var elems = shuffle($(childElem));
$this.remove(childElem);
for (var i = 0; i < elems.length; i++)
$this.append(elems[i]);
});
}
})(jQuery)
演示:Fiddle
在这种情况下,在IIFE方法中,我们接收jQuery对象作为参数,并将其命名为本地范围的变量$
,以便我们可以在插件中使用较短的形式。