2017-02-16 12 views
6

を持つ関数から子要素を除外しますか?は、以下のコードではjQueryを

私はこれまでのところ持っている:黄色にすべてを変える

$("p").html(function(i,event){ 
    return event.replace(/(red)/g,'yellow'); 
}); 

を...。

if (event.target.tagName === "a") 
{return false} 

しかし、私は、物事の数十、私は効果なしに、stackoverflowの上で見つけたを試してみた:私は、私は句はの線に沿って何かを言っている場合で追加する必要がありますと仮定します。何か案は?

答えて

1

ダーティあまりにも具体的な理由や<p>で多くの<a>かのインスタンスでは動作しませんが、<p>に一つだけ<a>があれば動作します。

最良の方法は正しい正規表現を見つけることです。

var aContent = $('p > a')[0].outerHTML; 
 

 
$('p').html(function(i,event) { 
 
    var parts = event.split(aContent); 
 

 
    for (var i, l = parts.length; i<l; i++) { 
 
     parts[i] = parts[i].replace(/red/ig, 'yellow'); 
 
    } 
 

 
    return parts.join(aContent); 
 
});
<p>Red red red red <a href="http://www.google.com">red</a> red red</p> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

ニース、私は私の問題を単純化しすぎ - 。リンクは、他の言葉を持っている可能性があり、私は上記の私の質問を更新しました... – JohnG

+0

は、それが更新さを、より多くの 'regex'問題です@JohnG私の答えは、それが助けの場合は、それ以外の場合は私の質問を 'regex'経験豊富な人に連絡するように更新しました – smarber

4

あなたはcontents()を使用してテキストノードを反復することができます。これはhtml()を使用して、内部要素のいずれかのイベントリスナーへの影響の道はありませんでしょう

$('p').contents().each(function() { 
 
    if (this.nodeType === 3) { 
 
    this.textContent = this.textContent.replace(/red/gi, function(match) { 
 
     return match === 'Red' ? 'Yellow' : 'yellow' 
 
    }); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p>Red red red red <a href="http://www.google.com">red</a> red red</p>

+0

ありがとう、それは私が尋ねたことをまさにします....私は、しかし、常に賢明ではありません!私の実際の問題は、

赤の

をハイパーリンクにすることです。したがって、既にハイパーリンクにあるテキストを除外する必要があります。 textContentの使用は、もはやhtmlで追加されないので、機能しません...申し訳ありません!どんなアイデア? – JohnG

+1

は 'replaceWith()'を使うことができますhttps://jsfiddle.net/nLddwdz9/ – charlietfl

+0

チャーリーに感謝 - 私はそれを使うことができると思います! – JohnG

0

私は別のルートを取った:子供を隔離、ランダムなテキストとその場所を置き換える、私たちを行いますいつものように置き換えて、そのランダムな文字列を私たちの子コードに置き換えてください。

var para = $("p"); 
 
var child = para.children()[0]; 
 
var text = child.outerHTML; 
 

 
para.find(child).replaceWith("zzzz"); 
 

 
$(para).html(function(i,event){ 
 
    return event.replace(/(red)/gi,'yellow'); 
 
}); 
 

 
$(para).html(function(i,event){ 
 
    return event.replace("zzzz", text); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<p>Red red red red <a href="http://www.google.com"> this should be red alone</a> red red</p>

関連する問題