这个想法是重写原始 HTML(动态)并创建选项卡式内容。所以假设我们有类似的东西:
<div id="tabber">
<h1>Tab one</h1>
...HTML text 1...
<h1>Tab two</h1>
...HTML text 2...
<h1>Tab three</h1>
...HTML text 3...
</div>
上面的代码应该以如下形式结束:
<div id="tabber">
<ul>
<li class="tabbertab">Tab one</li>
<li class="tabbertab">Tab two</li>
<li class="tabbertab">Tab three</li>
</ul>
<div class="tabberdiv">...HTML text 1...</div>
<div class="tabberdiv">...HTML text 2...</div>
<div class="tabberdiv">...HTML text 3...</div>
</div>
因此,我尝试使用类似的方法将所有 H1 转换为标签标签,并将下一个 H1 之间的内容转换为标签内容:
var menu_items = [];
var all_content = jQuery( '#tabber' ).html();
jQuery( all_content )
.filter( 'h1' )
.each( function() {
menu_items.push( {
title: jQuery( this ).text(),
contents: jQuery( this ).nextUntil( 'h1' ).map( function() {
return jQuery( this ).html();
} ).get()
} );
} );
...更多代码实际上将拆分保存在menu_items数组中的对象并创建应该显示(隐藏)相应内容的可点击选项卡。
问题是所有“主要” HTML 标记都从tabberdiv DIV 内容中剥离。例如,H2、TABLE、UL、P、DIV ......如果使用,它们都不存在。但是,A、LI、TR、TD 仍然存在。
我想知道上面的 jQuery 代码块有什么问题,哪个函数会导致 HTML 元素消失。
提前致谢!
========== 稍后 ==========
由于某种原因 html() 函数正在剥离所有父节点。我不是 jQuery 专家,我想这一定是有原因的。无论哪种方式,一个简单的解决方法如下:
jQuery( all_content )
.filter( 'h1' )
.each( function() {
menu_items.push( {
title: jQuery( this ).text(),
contents: jQuery( this ).nextUntil( 'h1' ).map( function() {
return '<' + this.nodeName.toLowerCase() + '>' + jQuery( this ).html() + '</' + this.nodeName.toLowerCase() + '>';
} ).get()
} );
} );