如何使用jQuery包装2个元素?

时间:2012-01-13 10:34:11

标签: javascript jquery find

我想制作以下代码:

<h2>TEXTz</h2>
<p>ARTICLE</p>


<h2>TEXTx</h2>
<p>ARTICLE</p>

看起来像这样:

<div class="highlight">
<h2>TEXTz</h2>
<p>ARTICLE</p>
</div>

<h2>TEXTx</h2>
<p>ARTICLE</p>

但我必须使用:contains for find h2 text并在h2之前和p之后添加wrap。

我失败的代码:

$.extend($.expr[':'],{containsExact: function(a,i,m){return $.trim(a.innerHTML.toLowerCase()) === m[3].toLowerCase();}});

var byItem = "TEXTz"

var ItemTitle = $("h2:containsExact(" + byItem +")").text();
var ItemDes = $("h2:containsExact(" + byItem +")").next("p").text();

$("h2:containsExact(" + byItem +")").html('<section class="highlightitem"><h2>' + ItemTitle + '</h2><p>' + ItemDes + '</p></div>');

http://jsfiddle.net/NDUzW/

2 个答案:

答案 0 :(得分:2)

方法.add()允许将元素添加到jquery对象。

然后你可以使用.wrapAll()在jQuery中擦除一组元素。

var $h2 = $("h2:containsExact(" + byItem +")");
if ($h2.length) {
    $h2.add( $h2.next('p') )
       .wrapAll( $('<div>').addClass('highlight') );
}

jsfiddle

上的工作示例

答案 1 :(得分:2)

只需使用jQuery函数:

var byItem = "TEXTz"

    $("h2")
        .filter(
            function() {
                if ($(this).html() == byItem) {
                    return true;
                }
                return false;
           }
       )
       .next("p")
       .andSelf()
       .wrapAll($("<section>")
            .addClass("highlightitem")
       );

Example