如何按顺序附加到jQuery对象而不使用父$(';<;div>;';)

如何按顺序附加到jQuery对象而不使用父$(';<;div>;';),jquery,Jquery,在准备进行一些DOM插入时,我构建了一个jQuery对象数组。例如,选择的选项包括: var options = []; for (...) { var $option = $('<option>') ... options.push($option); } 我想这样做,而不必将所有选项包装成额外的$(“”),然后将它们与子项()一起返回 是否可以创建一个空的jQuery对象,并按顺序向其追加元素,而不依赖父元素和子元素函数?($.add不能保证不在

在准备进行一些DOM插入时,我构建了一个jQuery对象数组。例如,选择的选项包括:

var options = [];

for (...) {
     var $option = $('<option>')
     ...
     options.push($option);
}
我想这样做,而不必将所有选项包装成额外的
$(“”)
,然后将它们与
子项()一起返回


是否可以创建一个空的jQuery对象,并按顺序向其追加元素,而不依赖父元素和子元素
函数?(
$.add
不能保证不在DOM中的元素的顺序)

以下代码似乎工作正常:

或者,您可以将该数组用作一个简单的数组(而不是
数组),并带有值 然后你可以:

var options = [];
for (var i = 0; i < 10; i++){
    options.push(i);
}

var newOptions = $.map( options, function( item ) { // take every second item
  if (item % 2 == 0)
      return '<option>' + item + '</option>';
});
var选项=[];
对于(变量i=0;i<10;i++){
选项。推送(i);
}
var newOptions=$.map(选项,函数(项){//每秒获取一项
如果(项目%2==0)
返回“”+项目+“”;
});
用于填充选择项的示例:
$select.html(新选项)

您可以使用DocumentFragment创建DOM片段,您可以将元素附加到其中,并且可以将片段附加到DOM中的任何位置

例如:

$(document).ready(function(){
    var fragment = document.createDocumentFragment();
    for (var i = 0;i < 10; i++) {
         fragment.appendChild(document.createElement('option'));
    }
    $('#target').append(fragment);
});
$(文档).ready(函数(){
var fragment=document.createDocumentFragment();
对于(变量i=0;i<10;i++){
fragment.appendChild(document.createElement('option');
}
$('#target')。追加(片段);
});

$('YourTarget').html(options.join('')
?@Dementic我喜欢这个:)当然OP可以使用字符串而不是数组。首先,Option对象很容易创建,一旦有了DOM元素数组,就可以使用
。append(options)
@Dementic我还想避免
html()
(序列化和反序列化元素)@Jack append不起作用。请看下面对Matteo Tassinari回答的评论这不是我所做的。我不会将它们附加到DOM中。我只是保留了一个
引用数组,供以后克隆。如果
$('.target class')
是DOM中的元素,则此解决方案的效率也会降低,因为DOM访问的成本要比内存中的高很多。要在以后克隆它们,必须使用jQuery对象,而不是数组。这就是我想要附加到jQuery对象的原因。
var $select = $('<select/>');
var options = [];

for (var i = 0;i < 10; i++) {
     var $option = $('<option/>')
     $option.text(i);     
     $select.append($option);
}

$select.appendTo('body'); // not a must, just to prove that it works.
console.log($select.find('option'));
var options = [];
for (var i = 0; i < 10; i++){
    options.push(i);
}

var newOptions = $.map( options, function( item ) { // take every second item
  if (item % 2 == 0)
      return '<option>' + item + '</option>';
});
$(document).ready(function(){
    var fragment = document.createDocumentFragment();
    for (var i = 0;i < 10; i++) {
         fragment.appendChild(document.createElement('option'));
    }
    $('#target').append(fragment);
});