Javascript 如何检查jquery.html()变量和RubyonRails生成的html之间的相等性?
目前我正在尝试比较两个变量,newhtml和oldhtml。 我使用以下方法获取旧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实
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的那一刻,所有内容都已经在数据库中了。