如何将具有特定css样式的所有li元素移动到另一个ul?

时间:2011-09-13 02:45:31

标签: javascript jquery html css html-lists

我需要将特定<li style="display:none;">下的所有<ul id="bob">移动到不同的<ul id="cat">。在执行此移动时,我需要保留所有类,ID和CSS样式,并且显然也是内容。

3 个答案:

答案 0 :(得分:4)

简单的单行:

$('#bob > li:hidden').appendTo('#cat');

将移动隐藏的所有ul#bob > li,这是具有ul#bob > li的{​​{1}}的超集,因为:

  

由于以下几个原因,可以将元素视为隐藏:

     
      
  • 他们的CSS style="display:none;"值为display
  •   
  • 它们是none的表单元素。
  •   
  • 它们的宽度和高度明确设置为0.
  •   
  • 隐藏了一个祖先元素,因此页面上不会显示该元素。
  •   

http://api.jquery.com/hidden-selector


如果您真的希望那些type="hidden"属性为style的元素,我会使用.filter()并且正则表达式:

display: none;

regexp是case-和(大部分)空格不敏感的,并且允许分号是可选的,这是有效的CSS。如果你不关心其中任何一个,你可以像以前一样使用单线程进行git-r-dun:

var pattern = /^\s*display:\s*none\s*;?\s*$/gi;
$('#bob > li').filter(function ()
{
    return pattern.test($(this).prop('style'));
}).appendTo('#cat');

答案 1 :(得分:0)

$('#cat').append($('#bob > li').filter(':hidden').remove());

答案 2 :(得分:0)

$('#bob li:hidden').remove().end().appendTo('#cat');