jQuery get (), Shadowbox, возвращает весь html содержащего div - PullRequest
0 голосов
/ 11 февраля 2010

В связи с моим предыдущим вопросом (спасибо за ваш ответ, Крио), у меня есть еще один вопрос для 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, я хотел найти заданное имя якоря и вернуть всю html-разметку содержащего его элемента div с новым именем класса в виде строки, которую можно передать html-плееру shadowbox, например:

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

Следующий код делает это, но с одной складкой, он переворачивает порядок документов

и
.
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, которая сохраняет порядок документов элементов в возвращаемой строке? Любые полезные предложения или замечания будут приветствоваться. Если есть более простой способ сделать это прямо, я бы тоже хотел это знать.

Спасибо

jjon

обновление: ответ благодаря комментариям от Pointy:

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

1 Ответ

0 голосов
/ 11 февраля 2010

Что ж, самой простой вещью для меня было бы убедиться, что пары рубрик и блоков контента совместно используют какой-то маркер класса. Затем вы можете перейти от ссылок до внешнего контейнера и найти 2 интересующих вас дел.

[править] ой, подождите - они уже внутри div "entry", верно? Что ж, если вокруг каждой пары div рубрика / контент всегда есть контейнер, то почему бы не перейти от тега "a" к этому уровню и затем получить дочерние элементы div?

// ...
html = $pageEntry.find('a ... ')
  .parent().parent()
  .children()
  .wrapAll('<div class="newclassname"/>')
  // ...
...