2008-10-06 12 views
2

我正在使用jQuery编写一个相当基本的脚本。但是,脚本的行为有所不同,具体取决于我是在本地Web服务器(本地主机)上还是在生产服务器上运行它。在开发上有效的jQuery开发失败

在发展,下面的代码返回的HTML我期待:

$('#objID').siblings('.mAddress').html(); 

生产,同样的语句返回undefined

两台机器上的文档结构都是一样的。我能找到的唯一区别是当我使用Firebug来浏览脚本时。在开发机器上,将手表放在$('#objID').siblings('。mAddress')上会产生[ span#object ],同时产生相同的手表结果[ [ span#object ] ]
(注意双方括号)。

任何想法?

加:

我已验证两个库是相同的。

我已经使用Firebug做了一些更多的实验。脚本的另一部分抓住了一套使用语句元素:

$('.ParentColumn2').each(function(i) { ... }) 

在该函数的身体,如果我设置的手表上this,在发展的this值是我所期望的:div.ParentColumn2,但生产的this值返回看起来像一个数组:[ div.ParentColumn2, div.ParentColumn2, div.ParentColumn2, .....]

的HTML基本上是一个表(我已经剥离出不相干的HTML,行重复):

<table> 
<tr> 
    <td> 
    <div class="ItemTemplate"> 
     <div class="ParentColumn2"> 
     <div><span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lbl_Address" class="lbl_Address mAddress">111 W Wacker Dr, </span><span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lbl_City" class="lbl_Address mCity">Chicago</span>&nbsp;<span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lbl_PostalCode" class="lbl_Address mPostalCode">60601</span>&nbsp;<a href="javascript:MapMe(this);" id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_hypMap" class="hypMap">Map</a>&nbsp;&nbsp;<span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lbl_Area" class="mArea">Loop</span><span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lt" class="mLt">41.8868010285473</span><span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl02_lg" class="mLg">-87.6312860701286</span> 
     </div> 
     </div> 
    </div> 
    </td> 
</tr> 
<tr> 
    <td> 
    <div class="ItemTemplate"> 
     <div class="ParentColumn2"> 
     <div><span id="dnn_ctr45874_ViewProjectGrid_GridView1_ctl03_lbl_Address" class="lbl_Address mAddress">...</span> ... 
     </div> 
     </div> 
    </div> 
    </td> 
</tr> 
</table> 

这两台机器之间的HTML尽可能相同,因为它都是由.Net生成的(不要让我开始)。

+0

你能跟我们分享一下你的HTML样本吗? – 2008-10-06 20:04:50

+0

两台机器上的HTML代码是否完全相同?您的生产环境是否通过AJAX注入其他HTML? – Devon 2008-10-06 20:38:27

+0

这是在DNN中托管的东西吗?如果是这样的话,你的开发机器在同一页面上包含与生产机器完全相同的模块? – Maurice 2008-10-08 20:28:18

回答

-3

我不经常使用jQuery,但我的第一个怀疑是你的库不同步。

1

既然你有不同的行为,这是合理的假设,东西是两页之间的不同,所以我的建议是减少的网页,这样就保持目前的行为最低,然后看看有什么不同。

1

我不按jQuery的文档使用.siblings()...(或没有需要)...

....运行。兄弟姐妹()的DIV(下)将不会返回任何东西,但在p的$( 'P:第一')中的一个将返回其他

<div><p></p><p></p></div> 

尝试使用

$('#objID').find('.mAddress').html(); 

$('#objID').children('.mAddress').html(); 

$('#objID .mAddress').html(); 

看很奇怪,它可以用于开发,但不能用于生产......但尝试一下。

布鲁斯

0

我想说几个方面看都是在高速缓存,在开发环境中的一切可能获取与每个请求重新加载,可以尝试在一个“?asdfasfrandom”在你的JavaScript结束包括标记以确保它们全部得到更新。

如果不是这样,那么当您提供服务时,您的JavaScript文件是否合并?例如,在Rails中,默认行为是将它们全部放入一个文件中,这可能会混淆事物。

如果不是这样,那么可能是因为下载时间的缘故,服务器上的JavaScript文件以不同顺序加载,或者以不同于本地的顺序执行。在执行代码之前,请确保dom已准备就绪。

基本上它看起来像它可能不是你的代码有问题(假设你使用相同的浏览器,并具有相同的HTML),但与秩序的东西的问题也在出现。

0

把相同的数据在开发中,然后转储视图源,并做一个差异。

为什么要用兄弟姐妹财产,不只是:

$('#objID .mAddress').html(); 

而且我认为,这两个兄弟姐妹,上面回报项目的数组,而不仅仅是一个单独的项目,所以我可能会喜欢的东西去这取而代之:

$($('#objID .mAddress').get(0)).html(); 

只返回第一个项目的html。

1

您的代码在$(document).ready(function(){...})中; ?

如果没有,这可能会导致不同的行为。在你的本地开发机器上,或许所有的东西都会被加载得如此之快以至于你的Javascript被调用的类型完成了DOM树,但是在生产服务器上可能还没有完成。

虽然没有解释在FireBug中出现的额外的嵌套括号。