論理的で正しいhtmlを記述する。デザインをcssで実現しようと試みる。ダメだ、タグ(div)が足りねぇ…。 これって結構経験したことあるパターンじゃありませんか? でもデザインのためにdivを追加するのはイヤだし、ということで、jqueryを使いhtmlをいじることなくdivを追加する方法を考えてみました。
例として、div#contentsをあたらにdiv#js_contentsを生成して囲むという場合。
$(document).ready(function(){
$("#contents").before("<div id=¥"js_contents¥">")
$("#contents").clone().appendTo("#js_contents")
$("#js_contents+#contents").remove()
});
簡単に説明すると、まず$("#contents").before("<div id=¥"js_contents¥">")で#contentsの前に<div id="js_contents">を生成します。 このとき、なぜか#js_contentsの閉じタグが<div id="js_contents">の直後に生成されてしまうため、#js_contentsが#contentsを囲む形になりません。
<div id="js_contents"></div> <div id="contents"> hoge </div>
そこで次に$("#contents").clone().appendTo("#js_contents")で#js_contentsの中に#contentsのコピーを生成します。
<div id="js_contents">
<div id="contents">
hoge
</div>
</div>
<div id="contents">
hoge
</div>
これで#js_contentsが#contentsを囲む形となりました。 しかし、#js_contentsに隣接する#contentsが余分なので、$("#js_contents+#contents").remove()で削除します。
ちょっと遠回りですがこれで実現可能です。 ただ疑問なのは、もともとのhtml上ではdivを増やしてはいませんが、こういう方法でdivを増やすのって結局論理的にはどうなんだろ。結局ムダなdivを増やすと言うことになってしまうんでしょうか…?
某オンラインブックマークから来ました。
サイト持ってないので通りすがりで…。
$(”#contents”).wrap(”)
↑テストしたら動きましたが、これでどうでしょうか。
(jQueryのバージョンは1.1.3.2です)
↑あ、すいません、サニタイズされて消えてますね……。
全角で打ち直してみます。
$(”#contents”).wrap(’<div id=”js_contents”></div>’)
あー!ホントですね、確かにwrapでできます!
と言いますか、通りすがり2さんからコメントをいただくまでwrapの存在を知りませんでした…;;
有益な情報をありがとうございます。