0

次のhtmlテキストがあり、javascriptでクラス「改ページ」を持つすべてのタグ「p」をキャプチャし、それを任意のテキストに置き換える必要があります。

この html テキストは DOM 構造とは異なり、テキストのように処理されるため、正規表現を使用する必要があります。

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Praesent pellentesque tincidunt adipiscing</p>

<p class="page-break">break</p>

<p>Suspendisse a velit at diam facilisis
egestas sit amet a lectus.</p>

<p class="page-break">other</p>

<p>Donec tristique placerat massa vitae hendrerit. Maecenas nec
massa adipiscing sem venenatis vehicula. Suspendisse mattis pretium
libero quis dignissim. Nulla volutpat imperdiet vehicula. Donec ut
tristique neque.</p>

DOM パーサーを使用できないのは、無効な html 要素を挿入する予定があるためです。前の HTML をこれに変換する予定です。テキストのように最初から解析して html 検証をスキップし、このように貼り付ける必要があります。

 <div class="pag visible">
 <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    Praesent pellentesque tincidunt adipiscing</p>
 </div>
 <div class="pag">   
    <p>Suspendisse a velit at diam facilisis
    egestas sit amet a lectus.</p>
 </div>
 <div class="pag">   
    <p>Donec tristique placerat massa vitae hendrerit. Maecenas nec
    massa adipiscing sem venenatis vehicula. Suspendisse mattis pretium
    libero quis dignissim. Nulla volutpat imperdiet vehicula. Donec ut
    tristique neque.</p>
 </div>

ご覧のとおり、すべての「.page-break」は ir を置き換えます

4

4 に答える 4

4

HTML の解析に regexp を使用しないでください。代わりに DOM を使用してください。プレーンな文字列がある場合は、 を作成し、DocumentFragmentそれに割り当てて.innerHTMLDOM を取得します。

pでタグを見つけてgetElementsByTagNameチェックし、.classNameそれに応じて行動してください。

于 2012-08-07T15:58:06.973 に答える
0

JQuery の使用を考えたことはありますか?

$('p').hasClass('page-break').html('replacement value goes here');

これにより、の内容が<p>「置換値がここに入る」に置き換えられます

または要素を完全$('p').hasClass('page-break').remove();に削除します。<p>

于 2012-08-07T15:56:57.277 に答える
0

HTML を正規表現で解析することはお勧めできません。以下のスニペットに示すように、XPath を使用して、指定された条件ですべてをフェッチし、返されたリストを反復処理してfor eachを<p>更新できます。textContent<p>

var pList = document.evaluate("//p[@class='page-break']", document, null, XPathResult.ANY_TYPE, null);   
var item = pList.iterateNext();  
while (item) {  
    item.textContent = "New Text";
    item = pList.iterateNext();  
}

説明

//p[@class='page-break']<p>ですべての要素をフェッチしclass='page-break'ます。 document.evaluate関数は type のオブジェクトを返しますXPathResultinterateNext()関数を使用して、その要素を取得できます。プロパティを使用して新しいテキストを設定できtextContentます。

于 2012-08-07T16:04:09.593 に答える
0
// your content
var content = '<p>Lorem ips...';
// to match any <p> with correspondent class
var regex = /(<p class.?=.?"page-break">.*<\/p>)+/g;
// to replace it with whatever you need:
content.replace(regex, "<p>MY TEXT HERE</p>");

于 2012-08-07T17:14:15.963 に答える