有一个HTML字符串
var s = "<h1>1</h1><h2>1.1</h2><h3>1.1.1</h3><div><h1>2</h1><h2>2.1</h2><h3>2.1.1</h3></div>" 我想把里面所以的标题,即h1 - h3都找出来,像下面这样显示出来

1.1 
1.1.1 

2.1 
2.1.1 然后我写了这样的JavaScript代码
$(s).find(":header").each(function() { 
    $("body").append("<div>" + $(this).html() + "</div>"); 
}); 结果很郁闷,只把div里面的3个标题显示出来了。

2.1 
2.1.1 然后我发现还有个filter方法,所以试了试
$(s).filter(":header").each(function() { 
    $("body").append("<div>" + $(this).html() + "</div>"); 
});  结果还是很郁闷,只把div外面的3个标题显示出来了

1.1 
1.1.1 请问:有什么办法能把所有的标题都列出来,还能保持原来的顺序。
像这个例子,可以先调filter再调find把所有的标题找出来,但是如果div包含的不是最后三个标题,顺序就会乱掉。
所以最好是一次把6个标题都找出来,怎么弄?!

解决方案 »

  1.   


    可以考虑先用正则把HTML标签去掉,获取到标题再append
      

  2.   

    你的是用jquery吗?试试用$("*")来匹配全部元素 
      

  3.   

    $(function(){
    var s = " <h1>1 </h1> <h2>1.1 </h2> <h3>1.1.1 </h3> <div> <h1>2 </h1> <h2>2.1 </h2> <h3>2.1.1 </h3></div>" 
    $("<div>"+s+"</div>").find(":header").each(function(){
        $("body").append("<div>" + $(this).html() + "</div>"); 
    });}) 
    要这么改.你可以传递一个手写的 HTML 字符串,或者由某些模板引擎或插件创建的字符串,也可以是通过 AJAX 加载过来的字符串。但是在你创建 input 元素的时会有限制,可以参考第二个示例。当然这个字符串可以包含斜杠 (比如一个图像地址),还有反斜杠。当你创建单个元素时,请使用闭合标签或 XHTML 格式。例如,创建一个 span ,可以用 $("<span/>") 或 $("<span></span>") ,但不推荐 $("<span>")。在jQuery 中,这个语法等同于$(document.createElement("span")) 。所以.必须达到根结点只有一个.
      

  4.   

    不好意思,这几天忙别的事情把这个事情给忘了。
    其实我是用JQuery读入一个HTML,然后把里面的标题都找出来,写一个目录。
    这个HTML里BODY下面直接子标签有H1和H2,由于格式、缩进等控制,H3和以后的小标题都是写在<div></div>里面的。
    问题的是JQuery读入了这个HTML之后,理论上来说根结点是<HTML>,不过从find的结果来看,它的实际没有根结点,直接就是BODY里面的内容。
    这样一来,取标题就麻烦了呵!
      

  5.   

    所以如果你要最终插入的HTML还需要修改的话.最好像上面写的.统一加个根结点防止出错咯.
      

  6.   

    了解了,空了来研究下。因为输入的是整个HTML,我还要试试是不是需要先把BODY取出来。
    多谢了呵呵。