问题 当自定义属性NOT等于x时,按.class AND删除


我拥有的:

我有一个选择元素。一些选项同时具有一个类(.filterable_option)和自定义属性(data-clienturn)。

我需要的:

基于另一个元素的on change事件,我需要从select元素中删除以下选项:

  1. ......被归类为 .filterable_option
  2. ...有一个data-customattribute值不等于预定义变量的值(var = $some_value)。

我的代码:

HTML:

<select name="myselect_a">
    <option selected="selected"></option>
    <option value="Apply filter">Apply filter</option>    
</select>

<select name="myselect_b">
    <option selected="selected"></option>
    <option data-customattribute="58" value="1" class="filterable_option">Dog</option>    
    <option data-customattribute="58" value="2" class="filterable_option">Cat</option>
    <option data-customattribute="60" value="3" class="filterable_option">Parrot</option>
    <option>I have no class or custom attribute.</option>
</select>

jQuery的:

$('#myselect_a').on('change', function() {
    var $myselect_a_option = $("#myselect_a").val();
    if($myselect_a_option === 'Apply filter'){  
        var $some_value = '58';
        $("select[name=myselect_b] option.filterable_option[data-customattribute!=" + $some_value + "]").remove();
    }
});

的jsfiddle: 

为了您的方便: http://jsfiddle.net/clarusdignus/L82UH/

我的问题:

我的代码没有删除所需的选项。什么都没发生。


5014
2018-05-22 12:07


起源

+1表示问题 - Neel
作为演讲的Neel Said +1 - Vicky
对于如此简单的错误,这是一个非常好的演示文稿;) - A. Wolff


答案:


您在选择器中使用了一个名称。请改用ID,如下所示

<select id="myselect_a">
    <option selected="selected"></option>
    <option value="Apply filter">Apply filter</option>    
</select>

http://jsfiddle.net/L82UH/1/

或者,如果您仍想使用名称,请尝试以下代码:

$('select[name="myselect_a"]').on('change', function() {
  //your code 
});

5
2018-05-22 12:10



是的,不知道为什么有人向你投降。要么更改select属性,要么更改选择器。 - CodingIntrigue
@Neel不确定你的意思但是 .on() 适用于1.7以来的所有jQuery版本 - A. Wolff
@ClarusDignus指定一个ID不仅仅是出于性能原因,而且它允许锚定元素,并允许标签引用它们。 - Matthew
@Matthew - 谢谢。根据您的回复,我会修改我的方法,并且在名称已经到位时放弃避免定义ID。 - Clarus Dignus
@Neel - 确实如此。我只是花时间审慎地思考和思考哪个成员最能回答我的问题。它可能是强迫症的潜在形式:-) - Clarus Dignus


您有选择错误的选择器,并且还纠正了以下位: name='myselect_b']

演示: http://jsfiddle.net/aamir/L82UH/2/

$('select[name="myselect_a"]').on('change', function() {
    var $myselect_a_option = $(this).val();
    if($myselect_a_option === 'Apply filter'){  
        var $some_value = '58';
        $("select[name='myselect_b'] option.filterable_option[data-customattribute!=" + $some_value + "]").remove();
    }
});

4
2018-05-22 12:13



如果属性值包含多个单词,则需要引号。只是用它,这是一种很好的做法。 - Rajaprabhu Aravindasamy
@ A.Wolff虽然这不是一个动态的价值,但我应该说 这个 属性选择器 - CodingIntrigue
@RGraham Ya,只是明白你的意思 - A. Wolff
+1。谢谢您的回答。我选择了Neel的回答,因为他在三分钟前按时间顺序回答。我最初选择了你的答案,因为它兑现了我的加注惯例(使用名字而不是ids),但是Neel更新了他的答案以纳入两个惯例。 - Clarus Dignus
这很酷.. :) - Aamir Afridi


看到您的标记中有name属性:

<select name="myselect_a">

并且您正在使用id选择器:

$('#myselect_a')

这是问题所在。


1
2018-05-22 12:16