некоторая справка по jQuery / javascript. Добавить товары в optgroup - PullRequest
2 голосов
/ 09 октября 2009

У меня есть массив с именем tmp

var tmp = ["05", "13", "27"];

если значение параметра равно значению в tmp, я хочу добавить этот параметр к определенной optgroup, иначе добавить его к другой optgroup. Я продолжаю получать все, что добавлено в optgroup # 2, кроме опции со значением "27". Что я делаю неправильно?

    var groups = $("optgroup");
    $("option").each(function() {
        var value = $(this).val();
        for (var x = 0; x < tmp.length; x++) {
            var isMatch = (tmp[x] === value);
            if (isMatch) {
                $(this).appendTo($(groups[0]));
            } else if (value.length > 0) {
                $(this).appendTo($(groups[1]));
            }
        }

    });

Спасибо за любые указатели, чтобы исправить это.

~ ск в Сан-Диего

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Вы должны добавить разрыв после каждого оператора appendTo, чтобы не продолжать сравнивать опцию со всеми значениями tmp.

var groups = $("optgroup");    
    $("option").each(function() {        
       var value = $(this).val();        
       for (var x = 0; x < tmp.length; x++) {            
            var isMatch = (tmp[x] === value);            
            if (isMatch) {                
                  $(this).appendTo($(groups[0]));            
                  break;
            } else if (value.length > 0) {                
                  $(this).appendTo($(groups[1]));            
                  break;
            }        
       }    
    });
1 голос
/ 09 октября 2009

Во-первых,

$(this).appendTo($(groups[1]));

можно изменить на

$(this).appendTo(groups[1]);

вам не нужно снова оборачивать элемент в объект jQuery, чтобы добавить его, HTMLElement будет работать нормально.

У вас есть HTML-код, который вы используете, и где находятся ваши <option> элементы, значения которых вы проверяете?

EDIT:

Я немного переписал ваш код, и это работает правильно (добавление NB не будет работать в IE6, и я верю 7 и 8 - в IE свойство innerHTML для элемента select доступно только для чтения, поэтому используйте createElement или конструктор Option создать параметры),

Рабочий пример . добавьте / edit к URL, чтобы увидеть код. У меня есть элементы option в массиве в рабочем примере, я предполагаю, что они у вас похожи.

var groups = $("optgroup");
$('options').each(function() {
    var $this = $(this);
    var val = $this.val();
    if (tmp.indexOf(val) !== -1) {
        $this.appendTo(groups[0]);
    } 
    else if (val.length > 0) {
        $this.appendTo(groups[1]);
    }
});
...