Jquery删除NextAll不工作选择

时间:2015-09-08 13:27:16

标签: javascript jquery html dom

这是我的问题,

无法在StackOverflow上找到的相关/类似问题中找到任何可行的解决方案。

我有一个填充了ajax数据的select,让我们称之为" mainSelect"它有一个" selectSomething"类。 在事件(更改/加密)上,如果所选值不是'',则会自动添加" subChoice"选择第一个,也有" selectSomething"类。

当用户在第二个选择中选择某个内容时,它会添加(或不选择,取决于选择了哪个值)当前一个下的新选择(仍然使用selectSomething类)。等等。像这样:

这是html部分:

<div class='choiceDiv'>
    <select class='selectSomething' id='masterSelect'>
    </select>
</div>

这是Js部分:

    $(document).ready(function(){
        populateMainSelect();
        //does its job correctly
    });
    $(document).on('change keyup','.selectSomething',function(){
        if($(this).val()!=''){
            //Need here to remove all sub-choices selects
            //NEXT LINE NOT WORKING !
            $(this).parent().nextAll('.selectSomething').remove();
            //And add or not a new one
            if(/*NeedToAddASubSelectCheck*/){
                //PopulateMySelect is a function that fills a jquery element. Like this  : 
                // function PopulateMySelect(elementToFill,dataToEnter,callback);
                PopulateMySelect($('<select>',{
                    class:'selectSomething'
                }).appendTo('#choiceDiv')),data,function(){
                    console.log('select is created, filled and added on page');
                });
            }
        }
    });

也许&#34;逻辑&#34;这在某种程度上不是最佳的,你可能有建议给我这个,

但现在我的主要观点是该行

$(this).parent().nextAll('.selectSomething').remove();

不起作用......有什么想法吗?

感谢您阅读/帮助

修改:

如果我在控制台输出:

console.log($(this).nextAll('.selectSomething'));

我得到一个长度为0的对象[] ......

3 个答案:

答案 0 :(得分:1)

接下来你不需要调用parent(),因为在这种情况下你将获得 parent 之后的下一个元素。

尝试:

$(this).nextAll('.selectSomething').remove();

答案 1 :(得分:1)

您需要使用

$(this).nextAll('.selectSomething').remove();

而不是

$(this).parent().nextAll('.selectSomething').remove();

因为您需要获得最近的父母,然后在其中找到任何选择并将其删除。

<强>解释

您的代码

$(this)         // this here is the selectSomething dropdown
    .parent()   // this is the choiceDiv parent div element
    .nextAll('.selectSomething')    // there nothing next to choiceDiv
    .remove();  // that's why this remove does not works here

答案 2 :(得分:0)

使用

$(this).parent().nextAll('.selectSomething').selectmenu('refresh', true);

$(this).parent().nextAll('.selectSomething').remove();

因为在动态删除选择框中的元素并动态添加选项后,需要刷新