作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图将包含类 black
的每两个元素彼此靠近地包装起来和blue
在 <div class="wrap">
在我的页面上。
我尝试了这个,但它不能按我的需要工作:
$(".black, .blue").each(function() {
$(this).next().hasClass('black').wrapAll('<div class="wrap"></div>')
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col red"></div>
<div class="col black"></div>
<div class="col blue"></div>
<div class="col red"></div>
<div class="col white"></div>
<div class="col yellow"></div>
<div class="col red"></div>
<div class="col black"></div>
<div class="col bllue"></div>
这是我想要的输出:
<div class="col red"></div>
<div class="wrap">
<div class="col black"></div>
<div class="col blue"></div>
</div>
<div class="col red"></div>
<div class="col white"></div>
<div class="col yellow"></div>
<div class="col red"></div>
<div class="wrap">
<div class="col black"></div>
<div class="col blue"></div>
</div>
最佳答案
当您循环遍历 .black
和 .blue
元素时,您当前的方法是有缺陷的,仅尝试检测以下 .black
元素,而且还因为您使用了 hasClass()
,它返回一个 bool 值,但尝试调用它的方法。
要实现此目的,您可以循环遍历每个 .black
并确定 next()
元素是否为 .blue
。如果是,您可以将它们都包装在 div
中,如下所示:
$('.black').each(function() {
var $this = $(this);
var $next = $this.next();
if ($next.is('.blue'))
$this.add($next).wrapAll('<div class="wrap"></div>');
});
.red { color: red; }
.black { color: black; }
.blue { color: blue; }
.white { color: white; }
.yellow { color: yellow; }
.wrap {
border: 1px dotted #CCC;
background-color: #EEE;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col red">Foo</div>
<div class="col black">Foo</div>
<div class="col blue">Foo</div>
<div class="col red">Foo</div>
<div class="col white">Foo</div>
<div class="col yellow">Foo</div>
<div class="col red">Foo</div>
<div class="col black">Foo</div>
<div class="col blue">Foo</div>
Using your example I would like to add a third element having the same class blue.
我假设在这种情况下,.black
之后可能有无限数量的 .blue
元素,并且它们都应该被包装。在这种情况下,请使用 nextUntil()
和 :not(.blue)
,如下所示:
$('.black').each(function() {
var $this = $(this);
if ($this.next().is('.blue')) {
$this.add($this.nextUntil(':not(.blue)')).wrapAll('<div class="wrap"></div>');
}
});
.red { color: red; }
.black { color: black; }
.blue { color: blue; }
.white { color: white; }
.yellow { color: yellow; }
.wrap {
border: 1px dotted #CCC;
background-color: #EEE;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col red">Foo</div>
<div class="col black">Foo</div>
<div class="col blue">Foo</div>
<div class="col red">Foo</div>
<div class="col white">Foo</div>
<div class="col yellow">Foo</div>
<div class="col red">Foo</div>
<div class="col black">Foo</div>
<div class="col blue">Foo</div>
<div class="col blue">Foo</div>
<div class="col blue">Foo</div>
<div class="col red">Foo</div>
关于jQuery 包装每个类 + 类元素(不同类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904672/
所以我有这个 UltraTicTacToe 游戏,我正在用 HTML/CSS/JS 编码。它由表中表中的表组成。当您单击 X 或 O 时,我想要突出显示您应该进入的下一个 TicTacToe 牌 ta
Some text Some more text 如何让每个 .example 的 .whatever 包含其 .test 的内容? 例如,如果代码是这样的: Som
我是一名优秀的程序员,十分优秀!