【问题标题】:appending div to a div in jquery将div附加到jquery中的div
【发布时间】:2012-04-21 04:27:12
【问题描述】:
$(function() {
    $(".commentbox .btnReply").click(function() {
        $(this).hide();
        var id = $(this).attr("id").split("-")[1]
        var strDiv = "<input type='text' class='txtCmnt' id='txtReply-" + id + "' /> <input type='button' class='btnSave' value='Save' id='btnSave-" + id + "' /> ";
        $("#container-" + id).html(strDiv);
    });
    var i = 1;
    $(".commentbox").on("click", ".btnSave", function() {
        var itemId = $(this).attr("id").split("-")[1]
        var txt = $(this).parent().find(".txtCmnt").val();
        var divid = itemId + "-" + i;

 i++;
            alert("i" + i);
        alert("replypostid" + divid);

        $.post("Handler/Topic.ashx", {
            reply: txt,
            id: itemId
        }, function(data) {
            alert(data);
            var str = "<div id='replytopost" + divid + "'></div>";
            $("#replytopost" + divid).append(data);

            $("#container-" + itemId).append(str);


        })

    });
});  

我想将从 post 函数返回的数据附加到一个动态创建的 div 中,该 div 附加到另一个 div 中。

jsfiddle 链接是 http://jsfiddle.net/UGMkq/49/

alert(data) 正在打印正确的输出,但没有附加数据的 div。

已编辑

如果我点击第一个保存按钮,它会给出replypostid1-1,然后 当我单击第二个按钮时,警报给出的是 replypostid2-2 而不是我想要 replypostid2-1

http://jsfiddle.net/UGMkq/50/

【问题讨论】:

  • Handler/Topic.ashx 的完整 url 是什么?我无法在 jsfiddle 上进行测试,因为 $.post 没有从那里执行
  • 您似乎尚未将您尝试选择的 div 添加到 DOM 中。您需要将 div 附加到 DOM 或将 data 附加到 str 变量,即 $(str).append(data);

标签: jquery


【解决方案1】:

您正在创建一个字符串,然后尝试附加到它,就好像它存在于 DOM 中一样。相反,试试这个:

$("#container-" + itemId).append(
   $('<div/>')
      .attr('id', '#replytopost'+divid)
      .append( data )
);

编辑

我不认为依靠在 Javascript 中保留一个计数器来处理回复计数是一个好的解决方案。如果页面被刷新,该计数器将丢失/重置。

如果此应用程序是数据库驱动的,您应该能够从数据库中获取当前回复的计数并具有更好的数据一致性 - 通过 ajax 调用传回 - 可能作为 json 对象。这将允许您避免在 JS 中保持和递增该计数器。

$.post("Handler/Topic.ashx", { reply: txt, id: itemId }, function(data) {
   //Assuming a json object like { "id": 1, "text": "What ever data equals now" }
   var reply = JSON.parse( data );
   $("#container-" + itemId).append(
      $('<div/>')
         .attr('id', '#replytopost'+itemId+'_'+reply.id)
         .append( reply.text )
   );
});

【讨论】:

  • 我已经更新了我的问题,请看一下。thks 你给出的代码有效
  • @prerna - 为您编辑了答案。我相信您修改方法可能会更好。
【解决方案2】:

您正在对尚不存在的元素调用 .append(data);它只是一个字符串。

我认为这也不是创建新元素的好方法。您应该使用document.createElement()element.appendChild() 或一些jquery 技术。

【讨论】:

    【解决方案3】:

    您在彼此之前切换以下内容。您不能附加到不存在的元素上。

    var str = "<div id='replytopost"+ divid + "'></div>";
    $("#container-" + itemId).append(str); // this has to be added first
    $("#replytopost" + divid).append(data);
    

    【讨论】:

      【解决方案4】:

      更新:试试这个代码:

          $(".btnReply").on("click", function() {
          thisvar = $(this).parent()
      input = $("<input>")
      input.appendTo(thisvar)
      $("<br>").appendTo(thisvar)
      $("<input>")
      .attr("type", "submit")
      .appendTo(thisvar)
              .on("click", function() {
              //Handle POST stuff here
              val = input.val()
              $("<div>").addClass("txtCmnt").text(val).appendTo(thisvar)
              })
      })​
      

      问题是

      var str = "<div id='replytopost"+ divid + "'></div>";
             $("#replytopost" + divid).append(data);
      

      当您创建此 div 元素时,它不会自动附加到 DOM。 因此,当您尝试获取 div 时:

      $("#replytopost" + divid)
      

      它会失败。以下是你的做法:

      // Create a div
          var str = $("<div>").attr("id", "replytopost"+divid)
      //Access it
          str.append(data)
      //Append it to anything
      str.appendTo("body")
      

      您有不止一个此类错误。如果你全部修复它们,它应该可以工作。

      【讨论】:

      • str.appendTo("#container-" + itemId);给出错误:- 对象不支持此属性或方法
      • 我重写了你的代码(没有 $.post 的东西)。它在上面。在这里试试:jsfiddle.net/frp3z
      • 好的,但我已经更新了我的问题,请看一下
      • 我正在尝试创建像这个网站这样的功能,其中主题可以有答案,每个答案都可以有 cmets
      • 根据我们给您的输入,您应该能够做到这一点。只需重复同样的事情并尝试一下。你应该自己做一些尝试,只有当你失败时,你才能在这个网站上发布问题。
      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多