6

$.ajax我从通话中返回了一大块 HTML 。来自 PHP 的字符串在开头有两个换行符,例如

$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)它抛出的点:TypeError: 'undefined' is not an object (evaluating 'hooks.cur = fn') jquery.js:1925。如果我删除换行符,它会起作用。我正在使用,$.parseHTML因为 jQuery 说:

如果已知字符串是 HTML,但可能以非 HTML 标记的任意文本开头,则将其传递给 jQuery.parseHTML(),它将返回代表标记的 DOM 节点数组。可以由此创建一个 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 回答