使用JQuery将多组元素包装在一个Div中
我正在使用一个下拉菜单,需要使用JQuery修改现有的html标记,使其适合设计 以下是一个简化的示例: 将包含多个“li”的所有“ul”封装在一个div中(在同一个div中,而不是每个ul包含一个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++; }//如果 }); // 每个 //
- 福
- 福
- 福
- 福
- 福
我的选择=[];
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-您应该找到列表项的总数。这