gpt4 book ai didi

jquery - 选择并拖动多个列表项(jQuery ui 可排序)

转载 作者:行者123 更新时间:2023-12-01 00:14:49 25 4
gpt4 key购买 nike

我找到了很好的解决方案(最后一个答案):

jQuery Sortable - Select and Drag Multiple List Items

http://jsfiddle.net/hQnWG/480/

HTML:

<ul>
<li>One</li>
<li>Two</li>
<li>Three</li>
</ul>
<ul>
<li>Four</li>
<li>Five</li>
<li>Six</li>
</ul>

JavaScript(使用 jQuery 和 jQuery UI):

$("ul").on('click', 'li', function (e) {
if (e.ctrlKey || e.metaKey) {
$(this).toggleClass("selected");
} else {
$(this).addClass("selected").siblings().removeClass('selected');
}
}).sortable({
connectWith: "ul",
delay: 150, //Needed to prevent accidental drag when trying to select
revert: 0,
helper: function (e, item) {
var helper = $('<li/>');
if (!item.hasClass('selected')) {
item.addClass('selected').siblings().removeClass('selected');
}
var elements = item.parent().children('.selected').clone();
item.data('multidrag', elements).siblings('.selected').remove();
return helper.append(elements);
},
stop: function (e, info) {
info.item.after(info.item.data('multidrag')).remove();
}

});

它工作得很好,但是当我在 Google Chrome 中拖动两个或多个元素时,JS 控制台会显示此错误:

Uncaught TypeError: Cannot call method 'insertBefore' of null

如何修复它?

最佳答案

我认为这是 jquery-UI _rearrange 函数中的一个错误...所以我做了一个重写该方法的黑客......在 dom 准备好后插入以下代码...这将解决问题

$.ui.sortable.prototype._rearrange = function (event, i, a, hardRefresh) {

a ? a[0].appendChild(this.placeholder[0]) : (i.item[0].parentNode) ? i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling)) : i.item[0];
this.counter = this.counter ? ++this.counter : 1;
var counter = this.counter;

this._delay(function () {
if (counter === this.counter) {
this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
}
});

}

这是 fiddle

http://jsfiddle.net/r83zY/

关于jquery - 选择并拖动多个列表项(jQuery ui 可排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com