1

私は探していましたが、私が持っている質問のバリエーションしか見つけることができません...

文字の前の文字列(文字、および文字の前後のスペースを含む)を削除する必要があります。文字列は毎回異なり、予測できないため、それが何であれ、DOMから削除する必要があります。したがって、これが出力の場合:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>

「鳥-、猫-、犬-」を削除するにはどうすればよいですか?そして、それらが変わるので、それらの単語(鳥、猫、犬)について具体的にすることなく。ダッシュ(-)は、必要に応じて別の文字にすることができます(例:*)。

4

3 に答える 3

1

正規表現を使用しないソリューションは次のとおりですhttp://jsfiddle.net/46G5c/

$('h2').each(function() {
    var h2 = $(this);
    var text = h2.text();
    var replacement = text.substr(text.indexOf('- ') + 2);
    h2.text(replacement);
});​

そして、これはあなたのデータに応じてより役立つかもしれないし、そうでないかもしれない正規表現を使用するものですhttp://jsfiddle.net/X3FTV/1/

var regex = /^[^-]* - /;
$('h2').each(function() {
    var h2 = $(this);
    var text = h2.text();
    h2.text(text.replace(regex, ''));
});​

どちらもjQueryを使用しますが、単純なJavaScriptに変更するのは簡単です。

于 2012-11-24T03:00:56.910 に答える
1

シンプルRegExpを使用してこれを解決できます。

HTML:

<h2>Birds - Norwegian Yellow Finch</h2>
<h2>Cats - Domestic Shorthaired Tabby</h2>
<h2>Dogs - Alaskan Husky Cross</h2>​

JavaScript:

var re = /^[^-]+-\s*/;

function processText(el) {
    el.textContent = el.textContent.replace(re, '');
}

var elements = ​document.getElementsByTagName('h2')​​​​;

for(var i = 0, l = elements.length; i < l; i++) {
    processText(elements[i]);
}​

デモ

于 2012-11-24T03:05:30.890 に答える
1

以下は、すべてのh2要素をループし、正規表現置換を介して先頭を削除します。

window.onload = function() {
    var h2s = document.getElementsByTagName("h2"),
        i;

    for (i=0; i < h2s.length; i++)
        h2s[i].innerHTML = h2s[i].innerHTML.replace(/^[^-]+ - /,"");​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
};

デモ: http: //jsfiddle.net/nGfYd/5/

JavaScriptはページの解析中に検出されたときに実行されるため、onloadハンドラーはページの読み込みが完了した後にコードが実行されるようにしますが、JavaScriptは既に解析された要素のみを操作できます。onload問題の要素の後にスクリプトブロックにコードを含める場合は、ハンドラーは必要ありません。実際、私の好みは、ブロックを本文の最後の終了タグ<script>の直前に配置し、ハンドラーを使用しないことです。</body>onload

編集:他の回答の下のコメントから、jQueryを使用して満足しているようです。その場合、これを行うことができます。

$(document).ready(function(){
    $("h2").text(function(i, oldVal) {
        return oldVal.replace(/^[^-]+ - /,"");
    });
});

デモ: http: //jsfiddle.net/nGfYd/7/

関数を.text()jQueryに渡すと、要素ごとにその関数が呼び出され、要素の古い(現在の)値が渡されるため、.each()ループも必要ありません。

(本文の最後にあるスクリプトブロックにコードを配置する場合も、ドキュメントレディハンドラーは必要ありません。)

于 2012-11-24T03:06:22.003 に答える