Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查jquery.html()变量和RubyonRails生成的html之间的相等性?_Javascript_Jquery_Html_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 如何检查jquery.html()变量和RubyonRails生成的html之间的相等性?

Javascript 如何检查jquery.html()变量和RubyonRails生成的html之间的相等性?,javascript,jquery,html,ruby-on-rails,ajax,Javascript,Jquery,Html,Ruby On Rails,Ajax,目前我正在尝试比较两个变量,newhtml和oldhtml。 我使用以下方法获取旧html: var oldhtml = $('#pop').html(); 我使用以下方法获得新的html: var newhtml = ("<%= escape_javascript render(:file => 'shared/_content') %>"); 但它不起作用。在这个场景中,oldhtml变量实际上只是前一个newhtml变量。因此,如果您单击主页上的相同内容,新html实

目前我正在尝试比较两个变量,newhtml和oldhtml。 我使用以下方法获取旧html:

var oldhtml = $('#pop').html();
我使用以下方法获得新的html:

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

但它不起作用。在这个场景中,oldhtml变量实际上只是前一个newhtml变量。因此,如果您单击主页上的相同内容,新html实际上应该是RubyonRails生成的旧html版本,即当前的html。我试着把它们加在一起,看看区别在哪里,但在我看来完全一样。我希望有人能把我推向正确的方向?谢谢

我想不起关于html返回的html格式的任何保证,尤其是WhiteSpace

但是,至少当我在firefox中从一个页面中提取一大块HTML时,结果似乎与服务器发送的格式相同

因此,字符串之间可能只有细微的区别,例如前导空格和尾随空格。尝试使用以下函数行比较两个HTML代码段:

function compare_html(a,b) {
    a = a.replace(/^\s+/,"").replace(/\s+$/,"");
    b = b.replace(/^\s+/,"").replace(/\s+$/,"");
    return a == b;
}

我想不起对html返回的html格式有任何保证,尤其是WhiteSpace

但是,至少当我在firefox中从一个页面中提取一大块HTML时,结果似乎与服务器发送的格式相同

因此,字符串之间可能只有细微的区别,例如前导空格和尾随空格。尝试使用以下函数行比较两个HTML代码段:

function compare_html(a,b) {
    a = a.replace(/^\s+/,"").replace(/\s+$/,"");
    b = b.replace(/^\s+/,"").replace(/\s+$/,"");
    return a == b;
}

jQuery文档警告说,对于.html,某些浏览器可能无法返回与原始文档中的html源代码完全相同的html。这也适用于动态插入的HTML

最好的方法是比较两个javascript字符串,这两个字符串都不会从DOM中读回

例如:


毫无疑问,这比这更复杂,但我相信你明白了。jQuery文档警告说,对于.html,一些浏览器可能不会返回与原始文档中的html源完全相同的html。这也适用于动态插入的HTML

最好的方法是比较两个javascript字符串,这两个字符串都不会从DOM中读回

例如:


毫无疑问,这比这更复杂,但我相信你明白了。

我会尝试将新的html放在一个隐藏的DOM元素中,然后从jquery.html获取该内容

未测试,但可能会消除html呈现问题

另外,对javascript使用三重相等比较:==而不是==。有关解释,请参见youtube上Javascript上的Cockford“好的部分”


总的来说,我会重新考虑你的设计,因为这种比较可能不太可能,而且会让你的架构暴露出各种各样的浏览器之谜。有时,您首先必须找出哪些内容不起作用才能得到有效的解决方案。

我会尝试将新的html放在一个隐藏的DOM元素中,然后从jquery.html获取该内容

未测试,但可能会消除html呈现问题

另外,对javascript使用三重相等比较:==而不是==。有关解释,请参见youtube上Javascript上的Cockford“好的部分”


总的来说,我会重新考虑你的设计,因为这种比较可能不太可能,而且会让你的架构暴露出各种各样的浏览器之谜。有时候,你首先要找出什么不起作用才能得到有效的解决方案。

这些都很有帮助,我实际上把答案结合起来,得到了一些有效的解决方案。最终起作用的是:

像以前一样获取旧HTML:

var oldhtml = $('#pop').html();
然后将新的html插入div:

$('#pop').html("<%= escape_javascript render(:file => 'shared/_content') %>");
if语句可以工作,但您需要确保将div更改为无法从数据库检索的任意值:

if(newhtml == oldhtml)
{
$('#pop').html("<h>toggled_off</h>");
$('#pop').hide();
}
else
{
$('#pop').html(newhtml);
}

这一切都很有帮助,实际上我把答案结合起来,得到了一些有用的东西。最终起作用的是:

像以前一样获取旧HTML:

var oldhtml = $('#pop').html();
然后将新的html插入div:

$('#pop').html("<%= escape_javascript render(:file => 'shared/_content') %>");
if语句可以工作,但您需要确保将div更改为无法从数据库检索的任意值:

if(newhtml == oldhtml)
{
$('#pop').html("<h>toggled_off</h>");
$('#pop').hide();
}
else
{
$('#pop').html(newhtml);
}

去掉两个HTML的标签,然后与==


`var StrippedString=OriginalString.replace/]+>/ig

去掉两个HTML的标签,然后与==


`var StrippedString=OriginalString.replace/]+>/ig

var newhtml=。。。线路工程?它是以ajax方式获取实时内容,还是在提供页面时确定的一次性字符串?我不确定我是否完全理解你的问题,但我不相信它是实时内容。它正在访问可以使用ajax实时添加的内容,但在它获取html的那一刻,所有内容都已经在数据库中了。。。线路工程?它是以ajax方式获取实时内容,还是在提供页面时确定的一次性字符串?
我不确定我是否完全理解你的问题,但我不相信这是现场直播。它正在访问可以使用ajax实时添加的内容,但在它获得html的那一刻,所有内容都已经在数据库中了。