【问题标题】:JQuery append to select with an arrayJQuery追加以选择数组
【发布时间】:2011-06-25 13:55:53
【问题描述】:

很简单,但你猜怎么着,不适合我。我有一个像这样的逗号分隔列表:我想附加到 <select> 的 Option1,Option2,Option3 所以它变成<select><option>Option1</option><option>Option2</option><option>Option3</option></select>

我可以像这样“拆分”列表(在获取列表的函数内):

var optionsarray = $(this).val().split(',');

    $(optionsarray).each(function(i){
        var seloption = '<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>'; 
    });

但是现在我如何将seloption 附加到我的选择列表中。如果我把

$('#selecttoappendto').append('<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>');

$('#selecttoappendto').append(seloption);

在每个循环内什么都没有发生。把它放在我可以附加的每个之外,比如optionsarray[0]optionsarray[1] 等,但我无法附加optionsarray[i],无论我怎么做(在每个内部或外部)。请帮忙 - 在此先感谢

【问题讨论】:

    标签: jquery select append each


    【解决方案1】:

    这是我编写和使用的;它比 user113716 给出的解决方案快一点,因为您正在跳过创建临时选择,所有这些都附加到该临时选择(即使它是一个 DOM 片段,它仍然需要 一些 时间),并且您还将跳过 .children() 查找并在最后展开最后的附加。

    // Appends multiple elements all at once; maintains chaining
    $.fn.appendAll = function ($eleArr) {
        var numEles = $eleArr.length
        ,    $useEle = new $();
        if (numEles) {
            while (numEles--) {
                $useEle = $eleArr[numEles].add($useEle);
            }
            return $(this).append($useEle);
        }
    };
    
    // Prepends multiple elements all at once; maintains chaining
    $.fn.prependAll = function ($eleArr) {
        var numEles = $eleArr.length
        ,    $useEle = new $();
        if (numEles) {
            while (numEles--) {
                $useEle = $eleArr[numEles].add($useEle);
            }
            return $(this).prepend($useEle);
        }
    };
    

    所以:

    var optsArr = $(this).val().split(','),
        $options = [],
        thisOption;
    
    $.each(optsArr, function(i) {
        thisOption = '<option value="' + optsArr[i] + '">' + optsArr[i] + '</option>';
        $options.push($(thisOption));
    });
    
    $yourSelect.appendAll(optsArr);
    

    我实际上正是为此编写了这些插件;这样做,我在 250 毫秒内构建了一个 1500+ 选项选择。 :D

    【讨论】:

    • 如果有人想知道它应该是$yourSelect.appendAll($options);
    【解决方案2】:

    从一个空字符串开始,您可以使用+= 在循环中构建一个字符串。然后.append()这个字符串。

    var optionsarray = $(this).val().split(',');
    
    var seloption = "";
    
    $.each(optionsarray,function(i){
        seloption += '<option value="'+optionsarray[i]+'">'+optionsarray[i]+'</option>'; 
    });
    
    $('#selecttoappendto').append(seloption);
    

    或者另一种选择是单独构建元素,将它们存储在容器中,然后从容器中附加它们。

    var optionsarray = $(this).val().split(',');
    
    var temp_sel = $('<select>');
    
    $.each(optionsarray,function(i){
        temp_sel.append('<option>',{text:optionsarray[i],
                                    value:optionsarray[i]
                                    });
    });
    
    temp_sel.children().appendTo('#selecttoappendto');
    

    修复了children 之后缺少的()

    【讨论】:

    • 非常感谢,完美,我“知道” += - 有点像 PHP 中的 .= 但无法让它工作,假设这就是你声明 var seloption = "";首先
    • @Russell:没错,你需要在+=之前用一个空字符串初始化它。
    猜你喜欢
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2018-02-21
    • 1970-01-01
    • 2012-05-21
    • 2015-02-25
    • 2011-01-15
    相关资源
    最近更新 更多