3

次のコードを使用して、30 秒ごとに最新のページ タイトルを自動的に取得/設定します。

<script type="text/javascript">
   setInterval(function() {
      var data = "http://mysite.com/mypage.php";
      $.get(document.location.toString()).then(function (data){
      //find and set the title of the page
      document.title = data.match(/<title>(.+)<\/title>/)[1];
        });
    }, 30000);
</script>  

アンパサンドを含むタイトルを除いて、うまく機能します。これらは通常どおりロードされ、30 秒後に次のものに置き換えられます。

&amp;

したがって、ページのタイトルが次の場合:

Fun & Games

30 秒後、次のようになります。

Fun &amp; Games

ありがとう

4

4 に答える 4

4

正規表現を使用してタイトルを抽出する代わりに、返されたページのタイトルを DOM に問い合わせてみてください。問題は、ファイルでは ですが、&amp;解析されると になり&ます。

$.get(document.location.toString()).then(function (data){
    //find and set the title of the page
    document.title = $(data).filter('title').text();
});
于 2013-05-16T20:45:21.520 に答える
3

生の HTML ソースには のようなものが含まれていると想定していますが<title>Fun &amp; Games</title>、これが有効である必要があります。

これは、ブラウザによって処理される場合は問題ありません。ブラウザは を&amp;アンパサンドとして理解するからです。

ただし、JavaScript のコンテキストでは、設定document.titleはプレーンな文字列であり、HTML によって解析されるものではありません。したがって、&amp;は解釈されず、そのまま残されます。

個人的にはunHTMLref、次のように定義された「ツールボックス」で呼び出される関数があります。

window.unHTMLref = function(str) {
    if( !str) return str;
    var d = document.getElementById('__unHTMLref');
    if( !d) {
        d = document.createElement('div');
        d.id = '__unHTMLref';
        d.style.display = "none";
        document.body.appendChild(d);
    }
    d.innerHTML = str.replace(/</g,'&lt;');
    return d.firstChild.nodeValue;
};

これにより、すべての HTML エンティティがデコードされ、解析された文字列が返されます。

于 2013-05-16T20:45:23.127 に答える
1

「&」の問題は、「&」に含まれていることです。開発者ツールを使用して要素を調べて、実際Fun &amp;amp; Gamesに であるかどうかを確認する必要があります。この場合、「amp;」があるかどうかを確認していないため、使用している置換関数に問題があります。「&」が見つかった後。

その場合は、indexOf といくつかの if ステートメントを使用して、壊れていないものを修正していないことを確認してください。

それが問題でない場合は、.text() 関数ではなく、.html() 関数を使用していることを確認してください。

于 2013-05-16T20:45:43.087 に答える
-2
<script type="text/javascript">
   setInterval(function() {
      var data = "http://mysite.com/mypage.php";
      $.get(document.location.toString()).then(function (data){
      //find and set the title of the page
      document.title = data.match(/<title>(.+)<\/title>/)[1].split("&amp;").join("&");
        });
    }, 30000);
</script>  

// BONUS: generic de-html escaping in JS:
o=document.createElement("div");
o.innerHTML=(" this &amp; that");
o.textContent // ===  "this & that"
于 2013-05-16T20:45:12.210 に答える