【问题标题】:How to get the wrapper element created with "wrapAll()"?如何获取使用“wrapAll()”创建的包装器元素?
【发布时间】:2011-10-21 19:36:50
【问题描述】:

考虑以下代码:(现场示例here

$(function() {
  var wrapper = $("<div class='wrapper'></div>");
  $(".a").wrapAll(wrapper);
  wrapper.css("border", "5px solid black"); // Doesn't work
});
.wrapper {
  background-color: #777;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="a">Hello</div>
<div class="a">Stack</div>
<div class="a">Overflow</div>

获取创建的包装器并更改其属性的正确方法是什么?

注意: DOM 中还有其他 .wrapper 元素,所以这不起作用:

$(".wrapper").css("border", "5px solid black");

我也不想给创建的包装器一个唯一的id

【问题讨论】:

    标签: javascript jquery wrapall


    【解决方案1】:

    由于你刚刚包装了元素,你可以使用parent()获取新插入的包装器:

    $(".a").wrapAll("<div class='wrapper'></div>")
           .parent().css("border", "5px solid black");
    

    【讨论】:

    • @Matthew, wrapAll() 返回被包装的元素。见this fiddle,它会说DIV而不是P
    • 如果有一种方法可以更可靠地捕获生成的包装器,那就太好了...使用 parent 只会上一层,但是如果有人进来并添加了一个嵌套的 div 作为包装器(例如 @ 987654327@),那么父级将不会得到最外层的包装器,这很可能是预期的。
    【解决方案2】:
    $(function() {
        var wrapper = $("<div class='wrapper'></div>");
        var wrapped = $(".a").wrapAll(wrapper);
        wrapped.css("border", "5px solid black");
    });
    

    【讨论】:

      【解决方案3】:

      wrapper中存储的jQuery对象会在wrapAll被调用时被克隆,所以你不能通过wrapper来影响已经插入DOM的.wrappers,你需要从文档中选择它们。

      【讨论】:

      • +1 用于解释 wrapAll() 的工作原理,尽管它没有回答我的问题。
      • @Misha - 我以为 Frederic 已经这样做了,只是想补充一点。
      • @karim79 作为对原始答案的评论可能会更好
      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      相关资源
      最近更新 更多