jquery appendTo在html元素之外丢失文本

时间:2013-02-28 15:50:43

标签: jquery

我的ajax看起来像这样:

//get ajax hint count
                        $.ajax({
                            url: "actions.php",
                            type: "GET",
                            data: "get_hint_count=1",
                            cache: false,
                            success: function (data){
                                $(".hint").empty();
                                $(data).appendTo(".hint");
                            }
                        });

并且数据包含:

?<span class="tooltip">Hint is available to registered users only</span>

但这一行:

$(data).appendTo(".hint");

仅附加.tooltip内的内容。 ?消失了

为什么?

2 个答案:

答案 0 :(得分:2)

正如DanC所说,$()不支持使用前导文本节点创建文档片段。

但是,append()不受此限制的影响,因此您可以反转逻辑并写入:

success: function(data) {
    $(".hint").empty().append(data);
}

这相当于对html()的一次调用:

success: function(data) {
    $(".hint").html(data);
}

答案 1 :(得分:0)

jQuery docs中记录了你在这个范围之外丢失这个角色的原因:

来自http://api.jquery.com/jQuery/#jQuery2

将HTML传递给jQuery()时,请注意文本节点不会被视为DOM元素。除了一些方法(例如.content())之外,通常会忽略或删除它们。 E.g:

var el = $( "1<br/>2<br/>3" ); // returns [<br>, "2", <br>]
el  = $( "1<br/>2<br/>3 >" ); // returns [<br>, "2", <br>, "3 &gt;"]

此行为是预期的。

你可以尝试做一些包装你收到的东西,例如:

$.ajax({
    url: "actions.php",
    type: "GET",
    data: "get_hint_count=1",
    cache: false,
    success: function (data){
        $(".hint").empty();
        $('<div>' + data + '</div>').appendTo(".hint");
    }
});