2

私はダムクォートをスマートクォートに変換していますcontenteditableが、問題は、次のような HTML 要素内でもそれらを置き換えることです。

<a href=“something” title=“something”

したがって、それらを無効にします。ユーザーのテキストに対してのみ実行したい。これがキャッチです。元の書式要素を保持する必要があるため、次のようなことはできません。

clean($('#something_container').text());

これにより、返されたときにすべての HTML 要素 (書式設定) が削除されます。私が持っているコードは次のとおりです。

content = clean($('#post_content').html());
$('#post_content').html(content);

// replaces ", ', --, <div> with <p>
function clean(html) {
  html = html.replace(/'\b/g, "\u2018")  // opening singles
         .replace(/\b'/g, "\u2019")  // closing singles
         .replace(/"\b/g, "\u201c")  // opening doubles
         .replace(/\b"/g, "\u201d")  // closing doubles
         .replace(/--/g,  "\u2014") // em-dashes
         .replace(/<div>/g, "<p>")  //<div> to <p>
         .replace(/<\/div>/g, "</p>"); //</div> to </p>
  return html;
};

ユーザーのテキストのみのダム引用符を置き換え、のような HTML タグをスキップする最良の (最も効率的な) 方法は何でしょう<img src="" />か? ありがとう!

4

1 に答える 1

4

考えられるアプローチは次のとおりです(効率についてはわかりませんが、ユーザーが手で入力した文字列のみを処理する場合、文字列はおそらくそれほど長くないため、問題にはなりません):

  1. 文字列を重複しないチャンクに分割します: HTML タグと残りの部分
  2. タグのみを残して、非タグのみで「引用を教育する」
  3. 紐を元に戻します

扱っている HTML の形式が整っている場合 (特に、" <" が浮かんでいない場合)、チャンクへの分割は簡単です。

var html   = '<p style="color:red">some "quotes" in here</p>'
var chunks = html.match(/(<.+?>|[^<]+)/g)
// returns Array: ['<p style="color:red">', 'some "quotes" in here', '</p>']

次に、clean()置換を処理する関数を考えると、次のように言えます。

cleaned = chunks.map(function(chunk){
  return /</.test(chunk) ? chunk : clean(chunk)
}).join('');

<と の間を除く任意の場所に置換を適用します>

于 2013-02-15T12:13:26.107 に答える