2012-03-28 4 views
0

私はこれだ:JQueryの.after()が要素の前にコードを挿入するのはなぜですか?

   $('input[name=whatWeLove1]').before('<ul><li>'); 
       $('input[name=whatWeLove1]').after('</li></ul>'); 

をし、それがこれを生成します。

<ul> 
    <li> 
    </li> 
</ul> 
<input type="text" name="whatWeLove1" class="" maxlength="40"> 

なぜ?

乾杯、 ステファン

+3

を使用することですページがロードされるとマークアップを使用して、実際のオブジェクトグラフの実際のオブジェクトであるDOMツリーを扱います。 –

答えて

2

おそらく、あなたが壊れたコードを入力しているため(修正する前に)、ブラウザ(またはおそらく火かくび、おそらくjquery)が適切なフォーマット/固定で表示しようとしています。

あなたが何をしようとして達成するための最良の方法は、ここでは基本的なポイントは、あなたがHTMLマークアップの面で考えているということですが、あなたが扱っていない.wrap()

$('input[name=whatWeLove1]').wrap('<ul><li>');

+0

閉じるタグは必要ありません。 – Jivings

+0

フェア十分に:)クール –

1

私はjQueryのは、自動的にあなただけのオープニングタグを挿入し、あなたのための要素を閉じたくないと仮定しますので、あなたが

$('input[name=whatWeLove1]').wrap('<ul>').wrap('<li >'); 
+1

私にそれを打つ。しかし、あなたは1つのラップ関数が必要です。 – Jivings

3

をしたいと思います。

$('input[name=whatWeLove1]').before('<ul><li>'); 

このご入力要素の前に要素を自動的に閉じ障害のあるマークアップを防ぐために、:

はあなたが前に要素を挿入するので.wrap();

$('input[name=whatWeLove1]').wrap('<ul><li>'); 
1

を使用します。

あなたは<ul><li>構造を作成し、その後に入力を挿入するか、入力をwrap()に直接入力することができます。

2

JQueryは、HTMLではなくDOMを操作します。これは微妙な違いですが、無効なHTMLを生成することはできません。最初の行を実行すると、2番目の行を実行するまでは一致しないタグが生成され、それはできません。

@ NicolaPeluchettiの説明のとおり、wrap関数を使用する必要があります。

関連する問題