4

私は JQuery find でいくつかのテストを行っていました.AJAXリクエストからのhtmlレスポンスがあるので、最初の結果はこれになります.

<!DOCTYPE html>
<html>
<body>   
      <div id="dashboard">
        <div id="dash2">
            <h1>Hi</h1>
        </div>
    </div>
</body>
</html>

私のAjaxの成功コードはこれです..

success : function(response,status) {                       
    console.log( $(response).find('#dashboard').html() );
}

コンソールに印刷すると、undefined.

ただし、応答ページを変更すると(ネストされたdivを作成しました)、これに

<!DOCTYPE html>
<html>
<body>
        <div id="div1">
            <div id="dashboard">
                <div id="dash2">
                    <h1>Hi</h1>
                </div>
            </div>
        </div>
</body>
</html>

返された Ajax 成功コードからの行 console.log( $(response).find('#dashboard').html() );は、

<div id="dash2">
    <h1>Hi</h1>
</div>

私の質問は、どのようにして最初の HTML を実行したときにconsole.log( $(response).find('#dashboard').html() );undefined が表示されたのですが、2 番目の HTML (div にネストされたもの) の内容が表示されました#dashboard(これは私が期待しているものです。

4

2 に答える 2

4

私が知る限り、サニテーションの手段としてどのタグをドロップするかはブラウザーに依存する動作<head/>です。

#dashboard実行中に見つからない理由

$(response).find('#dashboard')

#dashboardがサニテーション後にルート要素になり.find()、ルート自体にない子孫要素と一致するためである可能性が最も高いです。

私は通常、この問題を回避するために、空の<div>.

$("<div/>").html(response).find('#dashboard')
于 2013-02-03T23:26:25.027 に答える
0

jQuery は本体の内容を除くすべてを削除する#dashboardため、最上位にあるためfind、実際には の子孫を検索し#dashboardます。は最上位にあるため#dashboard、フィルターを使用して他の最上位ノードから選択できます。

http://jsfiddle.net/mowglisanu/SqL9Q/

于 2013-02-03T23:28:22.037 に答える