【问题标题】:jquery get select option siblingsjquery获取选择选项兄弟姐妹
【发布时间】:2011-11-07 01:41:45
【问题描述】:

我正在尝试获取除所选选项之外的所有选项,并且与所选选项不同。

考虑以下示例:

<select name="country" id="country">

    <option value="1" class="option_vat" selected="selected">United Kingdom</option>
    <option value="2" class="option_no_vat">United States</option>
    <option value="3" class="option_vat">Spain</option>
    <option value="4" class="option_vat">Portugal</option>

</select>

现在,当调用 change() 事件时,我想获取所选选项的类以及与所选选项不同的其他选项的类。 在这种情况下,唯一会添加到数组中的类是“option_no_vat”,因为西班牙和葡萄牙选项在所选的类(英国)具有相同的类。

有人可以提出解决方案吗?

【问题讨论】:

    标签: jquery arrays select option


    【解决方案1】:

    http://jsfiddle.net/vKXMP/1/

    $("select#country").change(function(){
        var $that, cls;
        $that = $(this);
        cls = $that.find("option:selected").attr("class"); //returns the class of the selected elements... only works when there is only one class
        console.log( $that.find("option").not("."+cls) ) //gives you back a jquery object of all the elements with a different class then the one selected
    });
    

    下一次,至少尝试一下。

    【讨论】:

    • +1。获取选定元素的另一种方法是this.options[this.selectedIndex]
    • @Felix Kling。哦,天哪,我总是忘记我的 JS 基础知识……谢谢
    • @user398341 也许你应该打开你的眼睛.. ehm 控制台:)
    • 嗯,使用jQuery很容易忘记这些东西...我想你并不孤单,不用担心:)
    • 这会让我获得除所选课程之外的一系列课程 - 还是所有选项,无论它们是否分配了课程?
    【解决方案2】:

    试试这个:

    var classes;
    
    $('#country').change(function()
    {
        classes = [];
    
        $(this).find('option:not(:selected)')
            .not('.' + $(this).find(':selected').attr('class'))
            .each(function()
            {
                var class = $(this).attr('class');
    
                if ( $.inArray( class, classes ) == -1 )
                    classes.push(class);
            });
    });
    

    http://jsfiddle.net/9JEyY/

    注意:这只有在每个元素只有一个类时才能正常工作。

    【讨论】:

    • @user398341:如果您使用的是 Firefox,那么可以。其他浏览器有自己的控制台...
    • 感谢 Joseph - 效果很好 - 我还在 if () 语句中添加了检查类是否存在,以确保它已分配类。
    【解决方案3】:

    给你

    工作demo

    $(function(){
        $("#country").change(function(){
            var classes = [], class;
            var currentClass = $(this).find("option:selected").attr('class');
            $(this).find("option").each(function(){
                class = $(this).attr('class');
                if(class != currentClass){
                    if($.inArray(class, classes) == -1){
                        classes.push(class);
                    }
                }
            }); 
            alert(classes.join(","));
        }).change();
    });
    

    classes 数组将包含您需要的所有唯一类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多