选择具有两个类并包装它们的元素

HTML

( ) ( { ( ) ) }

更新我希望使用bm classname将它包装在 ,我只想将Paren包含在他们的类名中

没有正确包装

 
if(b0){

您可以使用.wrapAll()并使用bm0类来选择元素

 var ops = /(==|<=|>=|!=|>|<)/, prev = /(if|else\s+if|while|for)/; $('.openParen').each(function () { var bm = this.className.match(/\b(bm\d+)\b/)[1], $this = $(this), $close = $('.closeParen.' + bm); var $set = $(this), next = this.nextSibling; while (next) { $set = $set.add(next); if ($close.is(next)) { break; } next = next.nextSibling; } if (ops.test($set.text())) { var prevEl = this.previousSibling; var $span = $set.wrapAll('').parent(); if (prevEl && prevEl.nodeType == 3 && prev.test($(prevEl).text())) { $span.prepend(prevEl) } } }) 

演示: 小提琴

这段代码应该可以解决问题:

 $.each($('.openParen'), function(index, startParen){ var classes = $(startParen).attr('class').split(' '); var bmClass = $.grep(classes, function(thisElement, index){ return thisElement.toString().match("^bm"); }); $(startParen).nextUntil($('.' + bmClass[0])).andSelf().add($('.' + bmClass[0] + ':last')).wrapAll(''); }); 

说明:

  1. 选择类“openParen”的所有元素。
  2. 循环遍历此列表并获取每个关联的“.bm”类。

     var bmClass = $.grep(classes, function(thisElement, index){ return thisElement.toString().match("^bm"); }); 
  3. 此代码获取以关键字“bm”开头的类名。

  4. 现在从当前元素开始选择所有元素,直到具有所需“bm”类的下一个元素。

     $(startParen).nextUntil($('.' + bmClass[0])) 
  5. 添加当前和最终的“bm”元素作为jquery nextUntil()不会将它们添加到包装集。

     $(startParen).nextUntil($('.' + bmClass[0])).andSelf().add($('.' + bmClass[0] + ':last')) 
  6. 用标签包裹套装。

     $(startParen).nextUntil($('.' + bmClass[0])).andSelf().add($('.' + bmClass[0] + ':last')).wrapAll(''); 
  7. 就是这样。 现在你的跨度为“paren”关键字很好地包含在外部跨度中,类为“new”。 还根据其对应的“bm”类进行分组。

  8. 现在我们需要做的只是在dom load事件中包含这些代码,我们就完成了。