【问题标题】:How Can I Remove a Surrounding DIV with jQuery?如何使用 jQuery 删除周围的 DIV?
【发布时间】:2011-01-03 04:33:45
【问题描述】:

在 Wikispaces 中,当您将目录添加到主要内容区域时,您在该主要内容区域中使用的任何标题 (h1-h6) 都会自动放置在目录中,并用作锚链接,当点击后,会将您带到页面下方的目录中引用的标题。

默认情况下,wikispaces 使用 div 围绕目录中的锚链接,这取决于您在主要内容区域 (h1-h6) 中使用的标题,它会为其应用更大的左边距。这是仅 h2 标题的目录的标记...

<div style="margin-left: 2em;"><a href="#toc1">Hello there</a></div>
<div style="margin-left: 2em;"><a href="#toc2">How are you?</a></div>
<div style="margin-left: 2em;"><a href="#toc3">Here's an External Link</a></div>
<div style="margin-left: 2em;"><a href="#toc4">Here's an Example Heading</a></div>
<div style="margin-left: 2em;"><a href="#toc5">Here's an Even Longer Example Heading</a></div>

我想完全删除丑陋和不必要的嵌入式 CSS 样式 DIV,并用无序列表包裹目录,用列表项包裹锚链接。所以使用 jQuery,上面的标记将被转换为更多语义标记......一个无序列表。

<ul>
<li><a href="#toc1">Hello there</a></li>
<li><a href="#toc2">How are you?</a></li>
<li><a href="#toc3">Here's an External Link</a></li>
<li><a href="#toc4">Here's an Example Heading</a></li>
<li><a href="#toc5">Here's an Even Longer Example Heading</a></li>
</ul>

jQuery 应该补偿用户在主要内容区域中放置的标题数量。所以基本上,无论如何,目录总是用无序列表包裹,不管有多少列表项......

感谢您的帮助!

【问题讨论】:

  • 是否有任何元素只包含来自维基空间的丑陋代码列表?就像&lt;div&gt;&lt;/div&gt; 一样?
  • 是的。这包含了上面的目录锚链接:

    目录

  • 好的,很酷,更新了我的答案,让它更直接
  • @Spencer 我今晚出去了,但祝你的项目好运!如果你付出这么多努力,我知道它会变得很棒!
  • 非常感谢,道格!有一个美好的夜晚。期待向您展示完成的项目。

标签: jquery css html


【解决方案1】:

这样的事情应该可以工作:

// Insert a UL after the h1 tag
var $ul = $("<ul></ul>").insertAfter($("div#toc > h1"));

// Find all the toc links
$("a[href^=#toc]").each(function(){
    var $li = $("<li></li>"),
        $parent = $(this).parent();

    // Append auto deletes it from its old position
    $li.append(this);

    // Remove the empty div
    $parent.remove();

    // Add the li to the ul
    $ul.append($li);
})

【讨论】:

  • +1 这肯定行得通。我见过类似的解决方案,只需获取 div,获取它的内容,然后将其添加before() div,然后删除 div。其实我今天才看到类似的东西:stackoverflow.com/questions/2029267/…
猜你喜欢
相关资源
最近更新 更多
热门标签