2017-07-20 6 views
1

私はjavascriptの非常に新しいものであり、基本的にこの場所や他のさまざまなリソースを見つけるために多くのグーグルで行ったと言って始めたいと思います。私が望むものに変更するためのスクリプトを見つけている間に(そしてそれを動作させるために)、指定されたdiv内で作成されたリンクに干渉します。 javascriptからリンクを除外する方法はありますか?javascriptはテキストに影響しますか?Javascriptからリンクを除外する

これはjavascriptです。最初の部分がうまく動作することは問題ありませんが(引用符で囲まれたテキストを置き換える場合)、htmlが引用符で囲まれているリンクやイメージは除外されているようです。

$("div.gam-posttem div").each(function(){ 
    this.innerHTML = this.innerHTML.replace(/\"([^\"]+)\"/g, 
     '<div class="gam-quotetext">"$1"</div>'); 
}); 
$not('div.gam-posttem > div > a').each(function(){}); 

そして、ここでは、私が使用していたHTMLです。

<div class="gam-posttem"><div class="gam-posttem1"> 

"quote here" and regular text here. "more quote here" 

<br><br><a href="http://www.google.com">Link is Here</a> 

</div></div> 

すべてのヘルプは大歓迎、あなたはCSSなどの任意の詳細情報を、必要な場合は、お気軽にお尋ねくださいされています。

+0

は正確にあなたはJavascriptをあなたのリンクをどうするかをしたいですか? – Vedant

+0

タグ内のテキストを避けるためにregexを更新することができます。そうでなければ内部ループを使用してタグをスキップします – Bug

答えて

0

これは特にトリッキーなことですが、JavaScript正規表現はルック・ビハインドを許可しません。あなたがしたいのは、同じ番号の<と>文字(それ以外の文字の外)の前に試して一致するペアです。でも、あなたができれば、それは...

かなり厄介な探して、正規表現になるだろうしかし、あなたが唯一の正規表現(賢明ではないが)を使用することが可能なマッチング、<>ペアの外の文字を気: <(?:[^><\"\']*?(?:([\"\']).*?\1)?[^><\'\"]*?)+(?:>|$)ますすべて<>のペアにマッチし、タグ内の引用符で囲まれた大括弧を無視します。したがって、これらのタグの外側にあるすべてのタグを一致させる必要があります。そこにこれを行うには良い方法は、おそらくですが、あなたは、次のアイデア試すことができ

:各タグのすべてのタグ

    1. マッチを、開始位置と長さは=>終了位置
    2. を計算します
    3. は(開始、終了)ごとの開始位置
    4. に文字列の長さを追加し、エンド位置
    5. の前に文字列の開始インデックスを追加ペア(私たちは試合を反転しているように)、あなたを実行しますメソッドを置き換えて文字列を変更します。

    String.prototype.spliceish = function(start, end, newSubStr) { 
     
        return this.slice(0, start) + newSubStr + this.slice(end); 
     
    }; 
     
    
     
    var tagMatch = /<(?:[^><\"\']*?(?:([\"\']).*?\1)?[^><\'\"]*?)+(?:>|$)/g; 
     
    var tokenMatch = /\"([^\"]+)\"/g; 
     
    
     
    function invertedMatch(htmlString) { 
     
    \t var returnString = htmlString; 
     
    \t var startIndexes = [], 
     
        \t lengths = [], 
     
        match = tagMatch.exec(htmlString); 
     
        while(match !== null) 
     
        { 
     
        \t startIndexes.push(match.index); 
     
        lengths.push(match[0].length); 
     
        match = tagMatch.exec(htmlString); 
     
        } 
     
        
     
        var endIndexes = startIndexes.map(function(val, ix) { return val + lengths[ix]; }); 
     
        var invertedStarts = [0].concat(endIndexes); // we are inverting, so capture start text. 
     
        var invertedEnds = startIndexes.concat(htmlString.length); 
     
        
     
        // will need to go backwards 
     
        for(var i = invertedStarts.length - 1; i >= 0; i--) { 
     
        \t var start = invertedStarts[i], 
     
        \t end = invertedEnds[i]; 
     
        \t var stringReplace = htmlString.substring(start, end); 
     
        returnString = returnString.spliceish(start, end, stringReplace.replace(tokenMatch, 
     
        \t '<div class="gam-quotetext">"$1"</div>')); 
     
        }; 
     
        
     
        return returnString; 
     
    } 
     
    
     
    $("#root").html(invertedMatch($("#root").html()));
    .gam-quotetext{ 
     
        color: green 
     
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <div id="root"> 
     
        <div class="gam-posttem"> 
     
        <div class="gam-posttem1"> 
     
    
     
        "quote here" and regular text here. "more quote here" 
     
    
     
        <br> 
     
        <br> 
     
        <a href="http://www.google.com">Link is Here</a> 
     
    
     
        </div> 
     
        </div> 
     
    </div>

  • +0

    ありがとうございました!しかし、これをJSFiddleやその他のもので完全に動作させることができますが、Jcinkフォーラムである私のサイトでは動作しないようです。単純な

    関連する問題