jquery在元素中查找文本节点,并使用标记进行连接和包装

时间:2012-09-05 13:39:29

标签: javascript jquery

我是一个新手,并且很难找到一些没有元素的文本,我试图用带有列表标记的标签来包装文本:

http://jsfiddle.net/danb/7xu6A/

HTML

<ul>
    <li><a href="#">item1</a></li>
    <li><a href="#">item2</a></li>
    <li><a href="#">item3</a></li>
    text <br>to wrap and combine        
    <li><a href="#">item4</a></li>
</ul>

这对我有用,直到我遇到一些字符串被标签打破的情况 - 即使我首先取出<br>它们仍然是单独的节点并且被包裹起来。

$('ul').contents().remove('br')
       .filter(function()
       {
           return (this.nodeType === 3 && $.trim(this.data) !== '');
       }).wrap('<li class="nav current"></li>');

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

这是您的解决方案(假设您的ul在此示例中具有“无论什么”的ID)

您的最终包装文本存储在变量'finaltext'

注意:取消注释注释行还会从页面中删除文本“要包装和合并的文本”,然后还将“text to wrap and combine”作为新列表项追加,并且最后,取出br标签!

var d = document.getElementById("whatever");

var nds = d.childNodes;

var finaltext = "";

$(nds).each(function(){

   var trmdvl = $.trim(this.nodeValue);

   if(trmdvl){
      finaltext += trmdvl + " ";
      //$(this).remove(); 
   }
});

//$(d).append("<li>" + $.trim(finaltext) + "</li>");
//$('br').remove();

下面假设HTML:

<ul id="whatever">
    <li><a href="#">item1</a></li>
    <li><a href="#">item2</a></li>
    <li><a href="#">item3</a></li>
    text <br>to wrap and combine        
    <li><a href="#">item4</a></li>
</ul>