【问题标题】:jQuery append() - return appended elementsjQuery append() - 返回附加元素
【发布时间】:2011-01-10 16:33:05
【问题描述】:

我正在使用jQuery.append() 动态添加一些元素。有没有办法获取这些新插入元素的 jQuery 集合或数组?

所以我想这样做:

$("#myDiv").append(newHtml);
var newElementsAppended = // answer to the question I'm asking
newElementsAppended.effects("highlight", {}, 2000);

【问题讨论】:

标签: jquery


【解决方案1】:

有一种更简单的方法:

$(newHtml).appendTo('#myDiv').effects(...);

首先使用jQuery(html [, ownerDocument ]) 创建newHtml,然后使用appendTo(target)(注意“To”位)将其添加到#mydiv 的末尾,从而扭转局面。

因为您现在开始$(newHtml) appendTo('#myDiv') 的最终结果是新的 html 位,.effects(...) 调用将在那个 new还有一点html。

【讨论】:

  • 使用 jQuery UI 版本 1.9.2 我得到 effects 不是函数...但 effectis
  • 我要补充一点,还有另一个签名:appendTo(target, context)。例如对于任何 jQuery 选择器,它允许搜索 target ,但仅在特定上下文中。如果您编写插件或库,它会非常有用。
  • 如果 newHtml 不是有效的 HTML 或有效的 jQuery 选择器,这将引发错误:$('/ This is Not HTML /').appendTo('#myDiv') 导致 Uncaught Error: Syntax error, unrecognized expression$('#myDiv').append('/ This is Not HTML /') 通过将文本附加到目标元素可以正常工作。
【解决方案2】:
// wrap it in jQuery, now it's a collection
var $elements = $(someHTML);

// append to the DOM
$("#myDiv").append($elements);

// do stuff, using the initial reference
$elements.effects("highlight", {}, 2000);

【讨论】:

  • 当我后来尝试将事件绑定到附加元素时,这对我不起作用。我使用了 var appendedTarget = $(newHtml).appendTo(element)。然后我可以使用 $(appendedTarget).bind('keydown',someFunc) 进行绑定
  • 我认为是$elements.effect("highlight", {}, 2000);,而不是effects
  • 这不起作用,因为 $elements 变量在被追加后发生变化并且不再可用。
  • @AlexV 这似乎有效,请参阅jsbin.com/xivedohofi/1/edit?html,js,output 上的现场演示,还可以查看与接受类似问题stackoverflow.com/questions/1443233/… 相同的答案
  • 看来他们已经在较新版本的 jQuery 中修复了这个问题。
【解决方案3】:
var newElementsAppended = $(newHtml).appendTo("#myDiv");
newElementsAppended.effects("highlight", {}, 2000);

【讨论】:

    【解决方案4】:

    小提醒,当动态添加元素时,append()appendTo()prepend()prependTo() 等函数返回一个 jQuery 对象,而不是 HTML DOM 元素。

    DEMO

    var container=$("div.container").get(0),
        htmlA="<div class=children>A</div>",
        htmlB="<div class=children>B</div>";
    
    // jQuery object
    alert( $(container).append(htmlA) ); // outputs "[object Object]"
    
    // HTML DOM element
    alert( $(container).append(htmlB).get(0) ); // outputs "[object HTMLDivElement]"
    

    【讨论】:

    • append() 返回的元素是容器,而不是新元素。
    【解决方案5】:

    我认为你可以这样做:

    var $child = $("#parentId").append("<div></div>").children("div:last-child");
    

    父#parentId 是从追加中返回的,因此添加一个jquery 子查询以获取插入的最后一个div 子。

    $child 是添加的 jquery 包装的子 div。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2012-05-24
      相关资源
      最近更新 更多