我注意到我正在帮助一位朋友的网站上有一个有趣的问题。当我在主页上时,我可以使用javascript / jQuery按预期访问DOM,一切正常。如果我使用控制台并输入console.log($(' html'));它按预期从站点返回html对象。
但是,如果我在索引以外的任何页面上执行完全相同的操作,则返回null。页面的来源看起来是一样的,我可以看到那里的所有元素,但是javascript本身似乎并不知道它们。
该网站是使用Typo3 CMS构建的,如果它可能是其中的一部分。
有没有人有这方面的经验?或者有没有办法告诉javascript在整页加载后重新读取DOM?
编辑有人要求提供该网站的链接,所以这里是:http://www.stinglonline.de/
答案 0 :(得分:3)
jquery和prototype之间存在冲突。
添加var $j = jQuery.noConflict();
行中的内容,然后在该页面上更新您的jquery以使用新的$j
变量$j("html")
,它应该适合您。请参阅:http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/
我在控制台中对http://www.stinglonline.de/haupt-menue/stingl-gmbh/profil.html进行了测试。
或者,您可以使用jQuery
代替$
,无论哪种方式最适合您。
答案 1 :(得分:1)
看起来只有主页正在运行jQuery。
如果您使用本机Javascript从DOM中进行选择,它就可以正常工作。
试一试:
document.getElementsByTagName('html');
在Javascript中做同样的事情$(' html');在jQuery中。 有几个Notes and things to consider使用这种原生Javascript方法。
我发现jQuery非常有用,但如果没有正确理解本机Javascript,它就会成为一个拐杖。
修改强> scrappedcola's Answer is correct当我查看时,我错过了代码中的jQuery标记。
答案 2 :(得分:1)
看来$
是http://www.stinglonline.de/top-menue/home.html上的jquery库的一部分
但是$
是每个其他页面上Prototype库的一部分。
您在主页上没有此问题,因为您没有在那里使用原型。
您应该在声明jquery库之前声明原型库。
答案 3 :(得分:0)
在主页中,输入$ in console(Chrome)。它使用jquery。 所以$('html')返回document.getElementsByTagName('html')。
>$
function (a,b){return new m.fn.init(a,b)} jquery.js?1399526417:2
在其他页面中,键入$ in console(Chrome)。它使用原型。 所以$('html')返回document.getElementById('html'), $('skiplinks')返回document.getElementById('skiplinks')。
>$
function $(b){
if(arguments.length>1){
for(var a=0,d=[],c=arguments.length;a<c;a++){
d.push($(arguments[a]))
}
return d
}
if(Object.isString(b)){
b=document.getElementById(b)
}
return Element.extend(b)
}
prototype.1.7.0.yui.js:1
$('skiplinks')
<ul id="skiplinks">…</ul>