gpt4 book ai didi

javascript - 使用jQuery Redux隐藏选择列表中的选项

转载 作者:行者123 更新时间:2023-11-30 06:47:05 25 4
gpt4 key购买 nike

Hide options in a select list using jQuery

公认的答案是完全错误的。它与跨浏览器不兼容。

投票最多的解决方案(删除选项,但保留完整列表的副本)是我一直在做的事情,但对我而言不再起作用。我必须在各种情况下添加和删除选项,因此,如果将列表替换为完整列表(我通过ajax获得),则必须再次对其进行重新过滤,以获得我真正想要的选项...所有这些选择都是基于其他选择,因此确实很讨厌。

我的问题是,是否有一个插件会真正从DOM中删除这些选项,但要记住它们的位置,以便以后可以轻松地将其重新添加到同一位置?从而使跨浏览器隐藏/显示选项?

最佳答案

(function($) {
$.fn.hideOption = function(val) {
var lastPos = 0;
$(this).children('option').each(function() {
var pos = $(this).data('prevPos');
if(!pos) $(this).data('prevPos', lastPos++);
else lastPos = pos+1;
});
var options = $(this).children('option[value="'+val+'"]');
var hiddenOptions = $(this).data('hiddenOptions');
if(!hiddenOptions) hiddenOptions = options;
else hiddenOptions = hiddenOptions.add(options);
$(this).data('hiddenOptions', hiddenOptions);
options.detach();
};

$.fn.showOption = function(val) {
var hiddenOptions = $(this).data('hiddenOptions');
if(!hiddenOptions) return;
var toAdd = null;
if(typeof(val) !== 'undefined') {
toAdd = hiddenOptions.filter(function() {
return $(this).val() == val;
});
} else {
toAdd = hiddenOptions;
}
hiddenOptions = hiddenOptions.not(toAdd);
$(this).data('hiddenOptions', hiddenOptions);
var visibleOptions = $(this).children();
var select = this;
var value = $(this).val();
toAdd.each(function(i,hidOpt) {
var optAdded = false;
visibleOptions.each(function(j,visOpt) {
if($(hidOpt).data('prevPos') >= $(visOpt).data('prevPos')) {
$(hidOpt).insertAfter(visOpt);
optAdded = true;
return;
}
});
if(!optAdded) $(hidOpt).prependTo(select);
});
$(this).val(value);
};
})(jQuery);


http://jsfiddle.net/mnpenner/fN2hm/14/

请尝试打破它或提出改进方法。

关于javascript - 使用jQuery Redux隐藏选择列表中的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466192/

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