以前の質問に関連して (Cryo さん、ご回答ありがとうございます)、javaScript の専門家についてさらに質問があります。
次のような 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 マークアップ全体を、新しいクラス名とともに、次のようにシャドウボックスの html プレーヤーに渡すことができる文字列として返したいと考えました。
"""
<div newclassname>
<div rubric>
<a name>
</div>
<div content block>
<p>
<a links>
</div>
</div>
"""
次のコードはこれを行いますが、1 つのしわで、<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 チェーンを提案できる人はいますか? 役立つ提案や観察は大歓迎です。ストレート js でこれを行うためのより簡単な方法があれば、それも知りたいです。
ありがとう、
ジョン
更新:Pointyからのコメントのおかげで答え:
elem = $("#content")
.find("a[name=entry]")
.parent()
.parent()
.wrapAll('<div class="new"></div')
.parent()
.html()