这是我疯狂的代码:
t.config.searchSpanInput.keyup(function () {
var searchCriteria = t.config.searchSpanInput.val();
$.each (t.config.promoInput, function (i, v) {
$.each ($(v + " option"), function (j, v) {
if (optObj[i][j].text().toLowerCase().indexOf(searchCriteria.toLowerCase(), 0) === -1) {
$(v).remove();
}
if (optObj[i][j].text().toLowerCase().indexOf(searchCriteria.toLowerCase(), 0) > -1) {
if (optObj[i][j].length === 1) {
$(v).append(optObj[i][j][0]);
}
}
if (! optObj[0][0]) {
$(v).prepend(optObj[0][0]);
}
});
});
});
所以......所有这一切都试图做一个简单的任务。
任何帮助将不胜感激。我目前在jquery.min.js的第3行得到Node cannot be inserted at the specified point in the hierarchy
。 :(
答案 0 :(得分:2)
如果您不想展示option
,请隐藏它!
首先,来自How do I make jQuery Contains case insensitive, including jQuery 1.8+?:
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
t.config.searchSpanInput.keyup(function () {
var searchCriteria = t.config.searchSpanInput.val();
$.each (t.config.promoInput, function (i, v) {
$(v).find('option').show() // show all options in v.
.not(':first-child') // drop first option (All)
.not(':Contains("'+searchCriteria +'")') // drop options that match search
.hide(); // hide the rest
});
)}
答案 1 :(得分:0)
我实际上正在开展一个这样做的项目。看看我的尝试:
$("#filterBox").keyup(function(e) {
if($(this).val() === "") {
$("option.myOptions").show();
} else {
var filter = $(this).val();
$("option.myOptions:contains('" + filter + "')").show();
$("option.myOptions:not(:contains('" + filter + "'))").hide();
}
});
我知道这会稍微改变你的过程,但我认为它可能比你正在做的更好。不是删除元素并将它们重新添加(并且必须进行所有排序),而是将它们隐藏起来更容易。