6

呼び出しから大量の HTML を返してい$.ajaxます。PHP からの文字列には、先頭に 2 つの改行があります。

$data = "

<div>
     <p>Here is some text</p>
</div>";

$.ajax呼び出しは次のとおりです。

$('form#form_id').submit(function(e){
    e.preventDefault();
    $form = $(this);
    $.ajax({
        url: $form.attr('action'),
        type: $form.attr('method'),
        data: $form.serialize(),
        dataType: 'html',
        success: function(data) {
            var $html = $($.parseHTML(data));
            $html.appendTo('#container_id').hide().fadeIn(300);
        }
    });
});

.hide().fadeIn(300)where it throws:を追加するまで、すべてが機能しますTypeError: 'undefined' is not an object (evaluating 'hooks.cur = fn') jquery.js:1925。改行を削除すると機能します。$.parseHTMLjQueryが言うので、私はを使用しています:

文字列が HTML であることがわかっているが、HTML タグではない任意のテキストで始まる可能性がある場合は、マークアップを表す DOM ノードの配列を返す jQuery.parseHTML() に渡します。jQuery コレクションは、たとえば $($.parseHTML(htmlString)) から作成できます。

何が起こっているのか分かりますか?

4

2 に答える 2

10

この問題は、コレクション内のテキストノードが原因であると思われます。.filter('*')

var $html = $($.parseHTML(data)).filter('*');
于 2013-03-06T22:20:11.190 に答える
0

私の HTML 文字列にはトップレベルのテキスト ノードがありませんでした。そう思ったのですが、問題は単なる余分な空白であることがわかりました。これは私にとってはうまくいき、後で空のノードを除外するよりも気分が良くなりました。

$($.parseHTML($.trim(html_string)))
于 2013-06-07T16:01:09.117 に答える