2

私はjQueryと非常に単純なスクリプトを使用して、引用符、アポストロフィ、および二重ダッシュをそれらの「スマート」な対応物に置き換えています。

function smarten(a) {
  a = a.replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018");      // opening singles
  a = a.replace(/'/g, "\u2019");                             // closing singles & apostrophes
  a = a.replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201c"); // opening doubles
  a = a.replace(/"/g, "\u201d");                             // closing doubles
  a = a.replace(/--/g, "\u2014");                            // em-dashes
  return a
  };

私はこれをTwitterJSへのコールバックとして使用しています。TwitterJSはリンクを解析し、次のようなブロックを生成します。

<ul>
<li>Here's a link! <a href="http://www.foobar.com">http://www.foobar.com</a></li>
</ul>

問題は、私がこれを行うと、次のことです。

$('#tweet li').html(smarten($('#tweet li').html()))

それはリンクを破壊します、そして私がこれをするならば:

$('#tweet li').html(smarten($('#tweet li').text()))

それらを完全に破棄します。<a>TwitterJSのリンク解析に干渉することなく、テキストのみを取得して(必要に応じてタグからも)「スマート」にしてから元に戻す、スマートで堅牢な方法はありますか?

4

2 に答える 2

1

jQueryプラグインを作成しましょう:

jQuery.fn.smarten = (function(){

    function smartenNode(node) {
        if (node.nodeType === 3) {
            node.data = node.data
                .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018")
                .replace(/'/g, "\u2019")
                .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201c")
                .replace(/"/g, "\u201d")
                .replace(/--/g, "\u2014");
        } else if (node.nodeType === 1) {
            if (node = node.firstChild) do {
                smartenNode(node);
            } while (node = node.nextSibling);
        }
    }

    return function() {
        return this.each(function(){
            smartenNode(this);
        });
    };

}());

使用法:

$('#tweet li').smarten();
于 2011-04-10T04:56:16.233 に答える
0

試す:

$('#tweet li a').each( function() { $(this).text( smarten( $(this).text() ) ); } );
于 2011-04-10T04:49:57.893 に答える