2

我有一个名为 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]));
            }
        }

    });

感谢您提供纠正此问题的任何指示。

~ck 在圣地亚哥

4

2 回答 2

1

首先,

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

可以改为

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

您不需要将元素再次包装到 jQuery 对象中以附加到它,HTMLElement 可以正常工作。

您是否拥有正在使用的 HTML 以及<option>您正在检查其值的元素在哪里?

编辑:

我已经稍微重写了你的代码,这可以正常工作(NB 附加在 IE6 中不起作用,我相信 7 和 8 也 - 在 IE 中,选择元素的 innerHTML 属性是只读的,所以使用 createElement 或 Option 构造函数来创建选项),

工作示例。将/edit添加到 URL 以查看代码。在工作示例中,我在数组中有选项元素,我假设您将它们放在类似的结构中。

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]);
    }
});
于 2009-10-08T22:34:45.630 回答
1

您应该在每个 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;
            }        
       }    
    });
于 2009-10-08T22:38:38.980 回答