JQuery получить выбрать вариант братьев и сестер - PullRequest
1 голос
/ 30 августа 2011

Я пытаюсь получить все параметры, кроме выбранного и с классом, отличным от выбранного.

Рассмотрим следующий пример:

<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>

Теперь при изменении () событие вызывается. Я хочу получить класс выбранной опции и классы других опций, которые отличаются от выбранной.В этом случае единственным классом, который будет добавлен в массив, будет 'option_no_vat', так как опция Испании и Португалии имеет один и тот же класс в выбранном (Великобритания).

Может кто-нибудь предложить решение, пожалуйста?*

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

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 голос
/ 30 августа 2011

Попробуйте это:

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/

Примечание: Это будет работать правильно, только если у вас есть только один класс на элемент.

1 голос
/ 30 августа 2011

Вот, пожалуйста,

Работающий демо

$(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 будет содержать все необходимые вам уникальные классы.

...