2
4

3 に答える 3

1

要素に子ノードが 1 つしかなく、そのノードが要素であることを確認するために、contents()でfilter()を使用できます。<p><b>

$("#selector p").filter(function() {
    var $contents = $(this).contents();
    return $contents.length == 1 && $contents.eq(0).is("b"); 
}).replaceWith(function() {
    return "<p class='h_replace'>" + $(this).text() + "</p>";
});
于 2012-09-05T05:56:54.467 に答える
1

これを試して:

var els = $('p').filter(function() {
    return /^<(b)>.+<\/\1>$/.test($.trim($(this).html()));
});

テキストノードのないp唯一の子を持つすべてのものを取得します。上記のコードのどのタグでもb変更できます。(b)

編集:反対票を投じる理由はわかりませんが、これはうまく機能します:

  • <p><b>Something</b></p> // true
  • <p> <b>Something</b> </p> // true
  • <p><b>Something</b> lorem</p> // false
  • <p>lorem <b>Something</b></p> // false
  • <p><span><b>Something</b></span></p> // false

デモ: http://jsfiddle.net/elclanrs/LFt8x/

于 2012-09-05T06:00:00.080 に答える
0

elclanrs answerは、テキストを適切に選択するためのトリックを行いました。繰り返しになりますが、デモページはこちらです。

最終コード:

$(document).ready(function() {

    var pbs = $('#selector p').filter(function() {
        return /^<(b)>.+<\/\1>$/.test($.trim($(this).html()));
    });

    pbs.replaceWith(function() {
        return '<p class="h_replace">' + $(this).text() + '</p>';
    }).addClass('h_replace2').css('width', '100%');

});

StackOverflowは最大です。パイプを使ってくれたみんなに感謝します!私を何時間も節約しました(そして何時間も私は日を意味します!!)ありがとう!

于 2012-09-05T06:17:49.147 に答える