0

タイトルが正しいかどうかわからない場合は、同意しない場合は変更を提案してください。

jquery(.load())を介してdivにロードされたコンテンツを操作していました。ロードされたコンテンツからいくつかのアイテムを削除する必要がありました。私が書いたjsfiddleの例(http://jsfiddle.net/AzxaL/12)と同じ方法でこれを行いました。これは、IDの重複を作成するload()関数を使用しませんが、これは関係ありません。

問題は、ある機能と別の機能が機能しない理由と、elseで何を変更する必要があるかですif(this.tagName =='H2'){$(this).remove(); 動作しない例の}?

違いを探す手間を省くために、1つだけが/*関心のある行にあります*/

働く

$('#copy_working_box').html($('#copy_working_box').children('#wrapper').children()).fadeIn(300);

動作しない

$('#copy_working_not_box').html(content).fadeIn(300);

また、機能していない例では、div#subcontentが削除されるのはh2だけであることに注意してください。

PSこの問題は、この例がどのように機能するかについての私の欠陥のある理解のためにのみ存在することを理解しているので、私は説明を探しています。

前もって感謝します。

4

3 に答える 3

2

jQuery フィルターを使用して要素を削除しないのはなぜですか?

$('#copy_working').click(function() {
    var $clone = $('#wrapper').clone();

    // remove unwanted elements
    $clone.find('#content #subcontent, h2').remove()

    $('#copy_working_box')
        .hide()
        .html($clone)
        .fadeIn(300);
});
于 2012-10-09T11:38:27.863 に答える
1

これを行う場合:

var content = $('#copy_working_not_box').children('#wrapper').children();

コードの実行時に要素のリストを含む jQuery オブジェクトを取得します。そのリストは動的ではないため、これらの要素の 1 つ (または複数) を DOM から ( を使用して.remove()) 削除しても、オブジェクト内の要素のリストは更新されません。ただし、jQuery オブジェクトに DOM 要素への参照が含まれているため、これらの要素のコンテンツへの変更が反映されます。


jQuery 関数を使用して要素を選択する場合、この場合は次のコードを使用します。

var content = $('#copy_working_not_box').children('#wrapper').children();

最終的に得られるのは、対応する DOM 要素への参照を含む jQuery オブジェクトです。jQuery オブジェクトは配列のようなものです (lengthプロパティがあり、角括弧表記を使用して個々の要素にアクセスできます[0])。したがって、ここでは単純に要素の配列と考えることができます。

使用している HTML を考えると、その配列は要素と of を持つ要素で構成され<h2>ます。説明のために、次のように表します。<div>idcontent

[<h2>, <div#content>]

今、あなたのコードで 2 つのケースを扱っています。

  1. 配列内の DOM 要素 (jQuery オブジェクト) の子孫である要素を DOM から削除します。
  2. 配列内の DOM 要素の 1 つである DOM から要素を削除します。

ケース 1 では、jQuery オブジェクト内の要素への参照から始めます。それが<div#content>要素です。次に、その子 - にアクセスし、それ[<p>, <div#subcontent>]を だけに<div#subcontent>絞り込んで削除します。配列にはまだ への参照が<div#content>あり、その子孫への参照があるため、この DOM への変更は配列に影響します (子への参照<div#subcontent>は から削除され<div#content>ます)。

ケース 2 では、jQuery オブジェクト内の要素への参照から始めます。それが<h2>要素です。次に、この要素を単純に削除します。これにより、DOM から要素が削除されるため、他の DOM 要素 (つまり、その祖先) 内の要素への参照が更新されます。ただし、jQuery オブジェクトに格納されている DOM 要素自体への参照はまだあります。

于 2012-10-09T11:43:37.623 に答える
0

あなたがやっているあなたのコードで

var content = $('#copy_working_not_box').children('#wrapper').children();

その後

.html(content)

jQuery.html(htmlString)メソッドはhtmlString入力ではなく as を受け取ることに注意してください。object

おそらくあなたはやりたいです.html(content.html());

于 2012-10-09T11:32:15.647 に答える