使用JQuery将多组元素包装在一个Div中

使用JQuery将多组元素包装在一个Div中,jquery,css-selectors,wrapall,Jquery,Css Selectors,Wrapall,我正在使用一个下拉菜单,需要使用JQuery修改现有的html标记,使其适合设计 以下是一个简化的示例: 将包含多个“li”的所有“ul”封装在一个div中(在同一个div中,而不是每个ul包含一个div) 福 福 福 福 福 我的选择=[]; i=0; //查找具有多个li的所有ul $(“ul”)。每个(函数(){ if($(this.find(“li”).length>1){ //将此添加到我的_选择中 我的选择[i]=$(此); i++; }//如果 }); // 每个 //

我正在使用一个下拉菜单,需要使用JQuery修改现有的html标记,使其适合设计

以下是一个简化的示例: 将包含多个“li”的所有“ul”封装在一个div中(在同一个div中,而不是每个ul包含一个div)

我的选择=[]; i=0; //查找具有多个li的所有ul $(“ul”)。每个(函数(){ if($(this.find(“li”).length>1){ //将此添加到我的_选择中 我的选择[i]=$(此); i++; }//如果 }); // 每个 //将我的_选择包装在div标记中 $(my_selection).wrapAll(document.createElement(“div”);
以上代码给出了此firebug错误:

“无法在层次结构中的指定点插入节点”代码:“3”


如何使其工作?

您的代码中有一个bug,试图按DIV包装您的LI

<script>
my_selection = [];
i = 0;
// find all ul's that have more than one li
$("ul").each(function() {
    var $ul = $(this);
    if ($ul.find("li").length > 1){
        // add this to my_selection
        my_selection[i] = $ul;
        i++;
    } // if
});

// wrap my_selection in div tags
$(my_selection).wrap(document.createElement("div"));
</script>

我的选择=[];
i=0;
//查找具有多个li的所有ul
$(“ul”)。每个(函数(){
var$ul=$(本);
如果($ul.find(“li”)。长度>1){
//将此添加到我的_选择中
我的选择[i]=$ul;
i++;
}//如果
});
//将我的_选择包装在div标记中
$(my_selection).wrap(document.createElement(“div”);

您的代码中有一个bug,试图按DIV包装您的LI

<script>
my_selection = [];
i = 0;
// find all ul's that have more than one li
$("ul").each(function() {
    var $ul = $(this);
    if ($ul.find("li").length > 1){
        // add this to my_selection
        my_selection[i] = $ul;
        i++;
    } // if
});

// wrap my_selection in div tags
$(my_selection).wrap(document.createElement("div"));
</script>

我的选择=[];
i=0;
//查找具有多个li的所有ul
$(“ul”)。每个(函数(){
var$ul=$(本);
如果($ul.find(“li”)。长度>1){
//将此添加到我的_选择中
我的选择[i]=$ul;
i++;
}//如果
});
//将我的_选择包装在div标记中
$(my_selection).wrap(document.createElement(“div”);

我不确定jQuery是否可以将数组作为选择器。在
$(my_selection)
中,my_selection不是一个jQuery对象,而是一个对象数组。您可以首先尝试使用
var my_selection=$(“”)生成jQuery对象。。。我的选择。添加($(此))


另外,使用
.wrapAll()
方法,您只需使用:
.wrapAll(“”)

我不确定jQuery是否可以将数组作为选择器。在
$(my_selection)
中,my_selection不是一个jQuery对象,而是一个对象数组。您可以首先尝试使用
var my_selection=$(“”)生成jQuery对象。。。我的选择。添加($(此))


另外,使用
.wrapAll()
方法,您只需使用:
.wrapAll(“”)

我回答这个问题时有点忙,对所有的问题表示抱歉。以下内容正确地解决了问题

<script type="text/javascript">
jQuery( function() {
    jQuery( 'ul' ).find( 'li:eq(1)' ).parent().wrapAll( '<div></div>' );
} );
</script>

jQuery(函数(){
jQuery('ul').find('li:eq(1)').parent().wrapAll('');
} );
编辑:我将li:gt(0)更改为li:eq(1),它们都可以工作,但其中一个更有意义

这很简单,它通过所有的ul和他们的孩子,它试图抓住第二个孩子。如果找到第二个子对象,它将返回到其父对象,将其添加到wrapAll方法中


编辑:如果你将文章编辑8次以上,它会变成一个社区Wiki,很有趣。

回答这个问题时我有点忙,很抱歉出现了所有问题。以下内容正确地解决了问题

<script type="text/javascript">
jQuery( function() {
    jQuery( 'ul' ).find( 'li:eq(1)' ).parent().wrapAll( '<div></div>' );
} );
</script>

jQuery(函数(){
jQuery('ul').find('li:eq(1)').parent().wrapAll('');
} );
编辑:我将li:gt(0)更改为li:eq(1),它们都可以工作,但其中一个更有意义

这很简单,它通过所有的ul和他们的孩子,它试图抓住第二个孩子。如果找到第二个子对象,它将返回到其父对象,将其添加到wrapAll方法中


编辑:如果你将文章编辑8次以上,它就会成为一个有趣的社区Wiki。

这将是一个更干净的方法:

$('ul:has(li)').wrap('<div></div>');

这将是一种更干净的方法:

$('ul:has(li)').wrap('<div></div>');

这有点像黑客

<script>
jQuery( function() {
    my_selection = [];

    i = 0;
    n = 0;
    jQuery( 'ul' ).each( function() {
        var ul = jQuery( this );
        if ( ul.children().length > 1 ) {
            my_selection[n++] = 'ul:eq(' + i + ')';
        }
        ++i;
    } );

    jQuery( my_selection.join( ',' ) ).wrapAll( document.createElement( 'div' ) );
} );
</script>

jQuery(函数(){
我的选择=[];
i=0;
n=0;
jQuery('ul')。每个(函数(){
var ul=jQuery(this);
如果(ul.children().length>1){
我的_选择[n++]='ul:eq('+i+');
}
++一,;
} );
jQuery(my_selection.join(',).wrapAll(document.createElement('div'));
} );

这有点像黑客

<script>
jQuery( function() {
    my_selection = [];

    i = 0;
    n = 0;
    jQuery( 'ul' ).each( function() {
        var ul = jQuery( this );
        if ( ul.children().length > 1 ) {
            my_selection[n++] = 'ul:eq(' + i + ')';
        }
        ++i;
    } );

    jQuery( my_selection.join( ',' ) ).wrapAll( document.createElement( 'div' ) );
} );
</script>

jQuery(函数(){
我的选择=[];
i=0;
n=0;
jQuery('ul')。每个(函数(){
var ul=jQuery(this);
如果(ul.children().length>1){
我的_选择[n++]='ul:eq('+i+');
}
++一,;
} );
jQuery(my_selection.join(',).wrapAll(document.createElement('div'));
} );

这些都是很好的答案。但是我注意到您的脚本不在
$(document).ready(function(){…})
中,并且您似乎用未包装在ready函数中的其他代码验证了此错误是否仍然存在

我试着发现威廉的密码对他有效(+1),但因为我的强迫症,我把它清理了一点

$(document).ready(function(){
 my_selection = [];
 $('ul').each(function(i){
  if ($(this).find('li').length > 1 ){
   my_selection.push(['ul:eq(' + i + ')']);
  }
 });
 $( my_selection.join(',')).wrapAll('<div class="wrapper"></div>');
})
$(文档).ready(函数(){
我的选择=[];
$('ul')。每个(功能(i){
if($(this.find('li')。长度>1){
我的选择。推送(['ul:eq('+i+')));
}
});
$(my_selection.join(',).wrapAll('');
})

这些都是很好的答案。但是我注意到您的脚本不在
$(document).ready(function(){…})
中,并且您似乎用未包装在ready函数中的其他代码验证了此错误是否仍然存在

我试着发现威廉的密码对他有效(+1),但因为我的强迫症,我把它清理了一点

$(document).ready(function(){
 my_selection = [];
 $('ul').each(function(i){
  if ($(this).find('li').length > 1 ){
   my_selection.push(['ul:eq(' + i + ')']);
  }
 });
 $( my_selection.join(',')).wrapAll('<div class="wrapper"></div>');
})
$(文档).ready(函数(){
我的选择=[];
$('ul')。每个(功能(i){
if($(this.find('li')。长度>1){
我的选择。推送(['ul:eq('+i+')));
}
});
$(my_selection.join(',).wrapAll('');
})

@William-您应该找到列表项的总数。这