1

newhtml現在、2つの変数とを比較しようとしていますoldhtml。私は以下を使用して古いhtmlを取得します:

var oldhtml = $('#pop').html();

次を使用して新しいHTMLを取得します。

var newhtml = ("<%= escape_javascript render(:file => 'shared/_content') %>");

次に、以下を使用してそれらを比較しようとしています。

if(newhtml == oldhtml)
{
  //is never called
  $('#pop').hide();
}
else
{
  //is always called
  $('#pop').html(newhtml);
}

しかし、それは機能していません。このシナリオでは、oldhtml変数は実際には前のnewhtml変数にすぎません。したがって、メインページで同じコンテンツをクリックすると、newhtml実際には、oldhtml(に存在するhtmlが<div id="pop">)のRubyonRailsで生成されたバージョンになります。違いがどこにあるかを確認するためにそれらを追加しようとしましたが、それは私にはまったく同じように見えます。私は誰かが私を正しい方向に動かすことができることを望んでいましたか?ありがとう!

4

5 に答える 5

2

newhtmlを非表示のDOM要素に入れて、そのコンテンツをjqueryから取得しようとします.html()

$('#HiddenDOM').html(newhtml);

if ($('#HiddenDOM').html() === $('#pop').html()) { ... }

テストされていませんが、htmlレンダリングの問題をキャンセルする可能性があります。

また、javascript:===の代わりにトリプル等式比較を使用して==ください。説明については、YouTubeのJavascript TheGoodPartsのCockfordを参照してください。

全体として、比較が本当に不可能であり、あらゆる種類のブラウザの謎にあなたのアーキテクチャを開く可能性があるため、私はあなたのデザインを再考します。場合によっては、最初に、機能するソリューションに到達するために機能しないものを見つける必要があります。

于 2012-05-08T01:50:44.170 に答える
1

html()特にwhitepaceによって返されるhtmlのフォーマットに関する保証を思い出せません。

しかし、少なくともFirefoxのページからHTMLのチャンクを引き出すと、出力されるものはサーバーから送信されたものと同じ形式になっているように見えます。

したがって、おそらく、先頭と末尾の空白など、文字列間には些細な違いしかありません。関数行thisを使用して、2つのHTMLスニペットを比較してみてください。

function compare_html(a,b) {
    a = a.replace(/^\s+/,"").replace(/\s+$/,"");
    b = b.replace(/^\s+/,"").replace(/\s+$/,"");
    return a == b;
}
于 2012-05-08T01:43:40.393 に答える
1

.html()jQueryのドキュメントでは、 「一部のブラウザでは、元のドキュメントのHTMLソースを正確に複製するHTMLが返されない場合がある」と警告されています。これは、動的に挿入されたHTMLにも当てはまります。

最善の策は、どちらもDOMから読み戻されない2つのJavaScript文字列を比較することです。

例えば:

var newhtml = ("<%= escape_javascript render(:file => 'shared/_content') %>"),
    oldhtml = newhtml;

...

if(newhtml == oldhtml)
{
  $('#pop').hide();
}
else
{
  oldhtml = newhtml;
  $('#pop').html(newhtml);
}

間違いなくこれよりも複雑ですが、あなたはその考えを理解していると確信しています。

于 2012-05-08T01:45:53.220 に答える
0

それはすべて非常に役に立ちました、そして私は実際に何かがうまくいくようにするために答えを組み合わせたようなものでした。動作することになったのはこれです:

以前のようにoldhtmlを取得します。

var oldhtml = $('#pop').html();

次に、新しいhtmlをdivに挿入します。

$('#pop').html("<%= escape_javascript render(:file => 'shared/_content') %>");

その後、oldhtmlを取得したのと同じ方法で、divからnewhtmlを取得します。

var newhtml = $('#pop').html();

ifステートメントは機能しますが、データベースから取得できない任意の値にdivを変更する必要があります。

if(newhtml == oldhtml)
{
$('#pop').html("<h>toggled_off</h>");
$('#pop').hide();
}
else
{
$('#pop').html(newhtml);
}
于 2012-05-08T20:57:48.583 に答える
0

両方のhtmlのタグを取り除き、==と比較します

`var StrippedString = OriginalString.replace(/(<([^>] +)>)/ ig、" ");

于 2014-10-13T21:32:40.223 に答える