有一个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.1
2
2.1
2.1.1 然后我写了这样的JavaScript代码
$(s).find(":header").each(function() {
$("body").append("<div>" + $(this).html() + "</div>");
}); 结果很郁闷,只把div里面的3个标题显示出来了。
2
2.1
2.1.1 然后我发现还有个filter方法,所以试了试
$(s).filter(":header").each(function() {
$("body").append("<div>" + $(this).html() + "</div>");
}); 结果还是很郁闷,只把div外面的3个标题显示出来了
1
1.1
1.1.1 请问:有什么办法能把所有的标题都列出来,还能保持原来的顺序。
像这个例子,可以先调filter再调find把所有的标题找出来,但是如果div包含的不是最后三个标题,顺序就会乱掉。
所以最好是一次把6个标题都找出来,怎么弄?!
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.1
2
2.1
2.1.1 然后我写了这样的JavaScript代码
$(s).find(":header").each(function() {
$("body").append("<div>" + $(this).html() + "</div>");
}); 结果很郁闷,只把div里面的3个标题显示出来了。
2
2.1
2.1.1 然后我发现还有个filter方法,所以试了试
$(s).filter(":header").each(function() {
$("body").append("<div>" + $(this).html() + "</div>");
}); 结果还是很郁闷,只把div外面的3个标题显示出来了
1
1.1
1.1.1 请问:有什么办法能把所有的标题都列出来,还能保持原来的顺序。
像这个例子,可以先调filter再调find把所有的标题找出来,但是如果div包含的不是最后三个标题,顺序就会乱掉。
所以最好是一次把6个标题都找出来,怎么弄?!
可以考虑先用正则把HTML标签去掉,获取到标题再append
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")) 。所以.必须达到根结点只有一个.
其实我是用JQuery读入一个HTML,然后把里面的标题都找出来,写一个目录。
这个HTML里BODY下面直接子标签有H1和H2,由于格式、缩进等控制,H3和以后的小标题都是写在<div></div>里面的。
问题的是JQuery读入了这个HTML之后,理论上来说根结点是<HTML>,不过从find的结果来看,它的实际没有根结点,直接就是BODY里面的内容。
这样一来,取标题就麻烦了呵!
多谢了呵呵。