Javascript jQuery选择器不工作时的HTML选择

Javascript jQuery选择器不工作时的HTML选择,javascript,jquery,html,razor,Javascript,Jquery,Html,Razor,我有一个生成select元素的代码 这个JS方法完成了这项工作 function Filter_Changed() { var filter1 = $(Filter1Selected).val(); var filter2 = $(Filter2Selected).val(); var filter3 = $(Filter3Selected).val(); $(Select).find("option").show(); if (filter1 >

我有一个生成select元素的代码

这个JS方法完成了这项工作

function Filter_Changed() {
    var filter1 = $(Filter1Selected).val();
    var filter2 = $(Filter2Selected).val();
    var filter3 = $(Filter3Selected).val();
    $(Select).find("option").show();
    if (filter1 > 0) {
        $(Select).find("option").not("[data-1='" + filter1 + "']").hide();
    }
    if (filter2 > 0) {
        $(Select).find("option").not("[data-2='" + filter2 + "']").hide();
    }
    if (filter3 > 0) {
        $(Select).find("option").not("[data-3='" + filter3 + "']").hide();
    }
}

问题是筛选似乎没有在选择上起到适当的作用,一些项目对于某些筛选设置被正确筛选,当我明确知道应该显示匹配的元素时,以及当Chrome dev tools控制台正确获取元素时,我做错了什么?

所以这个选择器方法不起作用,我记得有一个jQuery或JS方法由于延迟或其他原因对DOM提交了一些更改,但我记不起它是什么,谷歌也记不起来,每个选项元素都有正确的display:none或display:inline,但select的下拉列表始终为空,即使select元素的宽度正确,也有要显示的项目

因此,我假设这是1000s+条目的选择或Chrome的一些限制

这项工作的结果是必须这样做,从select中删除选项,使用它们,然后添加它们,并考虑在需要重新筛选select时保留所有选项元素的副本

var options;
function Filter_Changed() {
    var filter1 = $(Filter1Selected).val();
    var filter2 = $(Filter2Selected).val();
    var filter3 = $(Filter3Selected).val();

    if (options != null) { $(Select).html(options); }
    options = $(Select).find("option").detach();
    $(Select).html(options);

    if (filter1 < 253) { options.not("[data-1='" + filter1 + "']").remove(); }
    if (filter2 > 0) { options.not("[data-2='" + filter2 + "']").remove(); }
    if (filter3 > 0) { options.not("[data-3='" + filter3 + "']").remove(); }
}

只是为了确认,您正在像这样编写$Filter3Selected.val;而不是$Filter3Selected.val;?$select也是一样。你确定。隐藏是最好的方法吗?也许。移除会更好吗?@Shiv似乎是对的。您能为其中一个定义一个id并选中吗?$Select和$Select都可以工作。。。或者不工作-。-,$without和quotes在我的代码的很多其他部分工作。我希望能够取消选择过滤器,因此“删除”不可用appropriate@ColinSteel:我尝试了同样的方法,发现选择器没有什么问题。你能试试属性选择器并检查它是否有效吗$选择选项:非[data-3='+filter3+']
function Filter_Changed() {
    var filter1 = $(Filter1Selected).val();
    var filter2 = $(Filter2Selected).val();
    var filter3 = $(Filter3Selected).val();
    $(Select).find("option").show();
    if (filter1 > 0) {
        $(Select).find("option").not("[data-1='" + filter1 + "']").hide();
    }
    if (filter2 > 0) {
        $(Select).find("option").not("[data-2='" + filter2 + "']").hide();
    }
    if (filter3 > 0) {
        $(Select).find("option").not("[data-3='" + filter3 + "']").hide();
    }
}
var options;
function Filter_Changed() {
    var filter1 = $(Filter1Selected).val();
    var filter2 = $(Filter2Selected).val();
    var filter3 = $(Filter3Selected).val();

    if (options != null) { $(Select).html(options); }
    options = $(Select).find("option").detach();
    $(Select).html(options);

    if (filter1 < 253) { options.not("[data-1='" + filter1 + "']").remove(); }
    if (filter2 > 0) { options.not("[data-2='" + filter2 + "']").remove(); }
    if (filter3 > 0) { options.not("[data-3='" + filter3 + "']").remove(); }
}