首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery选择器不起作用时的HTML选择

jQuery选择器不起作用时的HTML选择
EN

Stack Overflow用户
提问于 2014-09-08 20:07:22
回答 1查看 81关注 0票数 0

我有以下代码,它生成我的select元素

代码语言:javascript
复制
    <select id="Select">
@foreach (var obj in Model.Objs)
{
        <option value="@obj.Value" data-1="@obj.Data1" data-2="@obj.Data2" data-3="@obj.Data3">
            @obj.Name
        </option>            
}            
    </select>

我还有另外三个select用来过滤这个select

代码语言:javascript
复制
@Html.DropDownListFor(x => Model.Filter1Selected, Model.Filter1Items, new { @onchange = "Filter_Changed()" })
@Html.DropDownListFor(x => Model.Filter2Selected, Model.Filter2Items, new { @onchange = "Filter_Changed()" })
@Html.DropDownListFor(x => Model.Filter3Selected, Model.Filter3Items, new { @onchange = "Filter_Changed()" })

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

代码语言:javascript
复制
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();
    }
}

问题是过滤似乎在Select上没有正确的效果,一些项目被正确过滤了一些过滤器设置,当我确定有匹配的元素应该显示时,当Chrome开发工具控制台正确获取元素时,我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-09-09 16:14:04

所以这种选择器方法不起作用,我记得有一个jQuery或JS方法,由于一些延迟或其他原因,它提交了一些对DOM的更改,但我记不起它是什么了,Google也记不起来,每个option元素都有正确的display:nonedisplay:inline,但select的下拉列表总是空的,甚至select元素的宽度也是正确的,这表明有要显示的项。

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

这项工作的结果是必须这样做,将optionselect分离,使用它们,然后附加它们,并考虑在需要重新过滤option时保留所有select元素的副本

代码语言:javascript
复制
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(); }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25723914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档