操作$ .ajax成功的“数据”:function(data){

时间:2009-12-10 01:28:56

标签: jquery

我有这个和一个简单的问题。

$.ajax({
    type: "POST",
    url: "/",
    data: $(".form").serialize(),
    dataType: "html",
    success: function (data) {
        $("#id").html(data);
    }
});

内部“数据”是我插入DOM的一些html。那没问题。但是我想在这之前操纵“数据”。我怎样才能做到这一点?例如,“data”中有一些li元素。例如,在将数据插入DOM之前,我将如何删除“data”字符串中的最后一个li元素?

我试过像

这样的东西
$(data li:last)remove();

......但那没有用。

感谢您的帮助。

4 个答案:

答案 0 :(得分:31)

您不需要隐藏的DIV。如果要将html字符串转换为DOM片段,只需在其上调用jQuery即可。在您的示例中:

success: function(data) {
    var jqObj = jQuery(data);
    jqObj.find("li:last").remove();
    $("#id").empty().append(jqObj);
}

虽然有些IE注意事项:

  • 如果你的数据很大,那么j在IE中就地通知它的速度很慢(至少在jQuery 1.2.6中)。在这种情况下,您可能希望为var div = jQuery("<div/>"); div.html(data);创建容器,然后在执行$("#id").html(div.html())之前对其进行操作。
  • 如果您的数据包含无效的HTML(未关闭的标签等),您可能会在IE中遇到奇怪的故障。只需确保html格式正确。

答案 1 :(得分:8)

您可以从任意HTML创建jQuery对象,例如:

$('<ul><li>Item</li></ul>');

所以,你可以这样做:

success: function(data) {
  var $list = $(data);

  $list.find('li:last').remove();

  // Do something with $list here, like append().
}

这是一个可以在JS Bin上使用的工作示例:http://jsbin.com/ejule3/edit

答案 2 :(得分:5)

返回的数据是一个字符串,通过jQuery无法在dom中找到,直到它实际上在DOM中。您需要解析此字符串并提取所需的数据,或在插入DOM后对其进行编辑。

答案 3 :(得分:3)

Jay's answer是对的 - 您需要先将HTML数据插入DOM(或解析字符串,这看起来很麻烦)。您可以做的是将数据附加到隐藏的DIV,修改它,然后将数据复制到不同的DOM元素或只显示DIV