7

私はこのHTML構造を持っています:

<div class="article-body">
<p>
    <a href="http://www.example.com">My Link</a>
Lorem Ipsum Dolor Sit amet.

</p>
<p><a href="http://www.example.com">Link that I must select.</a></p>
</div>​

そして、テキスト ノードのない 2 番目のリンクにクラスを適用する必要があります。"p:empty a" と "p > a:only-child" を試しましたが、うまくいきません... jQuery を使用して選択する方法はありますか?

4

5 に答える 5

7

セレクターではできませんが、filter()カスタム選択を実行するために使用できます:

$('p').filter(function(){
    var $clone = $(this).clone();
    $clone.children().remove();
    return !$clone.text();
}).addClass("red");​

ここで、フィドルを持っています: http://jsfiddle.net/adrianonantua/5daYT/

:)

アップデート

@dfsq の提案に従って、end()これと同じロジックを利用して 1 行で作成できます。

$('p').filter(function(){
    return !$(this).clone().children().remove().end().text();
}).addClass("red");​
于 2012-10-30T20:11:51.210 に答える
3

これは非常に迅速な解決策になります。クローン作成は不要:

$("p > a").filter(function(i, el) {
    return !el.previousSibling && !el.nextSibling;
}).parent();

またはこれ:

$("p").filter(function(i, el) {
    return el.firstChild && 
           el.firstChild === el.lastChild && 
           el.firstChild.nodeName.toUpperCase() === "A";
});
于 2012-10-30T20:31:59.180 に答える
3

別のソリューションfilter()

$("p").filter(function() {
    return $(this).contents().filter(function() {
        return this.nodeType == 3 && $.trim(this.nodeValue) != "";
    }).length == 0;
}).addClass("myClass")​;

デモ: http://jsfiddle.net/wyvLC/

于 2012-10-30T20:14:34.553 に答える
2

これはhttp://jsfiddle.net/nvass/で動作するはずです:

$("p").filter(function(){
    return $.grep(this.childNodes,function(node){
         return node.nodeType === 3 && node.nodeValue.replace(/(\s|\n|\r|\t)/g,"") !== "";
    }).length === 0;
}).css("background-color","green");
于 2012-10-30T20:14:15.013 に答える
0
于 2012-10-30T20:23:30.900 に答える