0

与我之前的问题相关(感谢您对 Cryo 的回复),我对这里的 javaScript mavens 还有一个问题。

给定这样的 html 结构:

<content>
    <div entry>
        <div rubric>
            <a name>
        </div>
        <div content block>
            <p>
            <a links>
        </div>
    </div entry>
    .
    .
    . multiple identical entry divs

</content>

使用 jQuery,我想找到一个给定的锚名称,并返回其包含条目 div 的整个 html 标记,以及一个新的类名,作为可以传递给 shadowbox 的 html 播放器的字符串,如下所示:

"""
<div newclassname>
    <div rubric>
        <a name>
    </div>
    <div content block>
        <p>
        <a links>
    </div>
</div>
"""

下面的代码做到了这一点,但是有一点点,它颠倒了 <div rubric> 和 <div content block> 的文档顺序。

var $pageEntry = null;

jQuery.get('thatPage.html', function(data){
    $pageEntry = jQuery(data).find("#content");
});

function displayEntry(entry){
    html = $pageEntry.find("a[name='" + entry + "']")
        .parent()
        .siblings()
        .andSelf()
        .wrapAll('<div class="newclassname"></div')
        .parent()
        .parent()
        .html()

    Shadowbox.open({
        options: {
            enableKeys: false
        },
        player: 'html',
        content: html
    });
};

任何人都可以建议一个不那么冗长的 jQuery 链来保留返回字符串中元素的文档顺序吗?欢迎任何有用的建议或意见。如果在直接 js 中有更直接的方法可以做到这一点,我也很想知道。

谢谢,

jjon

更新:感谢Pointy评论的答案:

elem = $("#content")
.find("a[name=entry]")
.parent()
.parent()
.wrapAll('<div class="new"></div')
.parent()
.html()
4

1 回答 1

0

好吧,对我来说最简单的事情是确保规则和内容块对共享某种类别标记。然后您可以从链接一直向上到外部容器并找到感兴趣的 2 个 div。

[编辑] 哦,等等——它们已经在一个“入口”div 中,对吗?好吧,如果每个 rubric/content div 对周围总是有一个容器,那么为什么不从“a”标签上升到那个级别,然后获取子 div?

// ...
html = $pageEntry.find('a ... ')
  .parent().parent()
  .children()
  .wrapAll('<div class="newclassname"/>')
  // ...
于 2010-02-11T16:23:25.357 回答