所以我正在开发一个网站,我们需要在将jQuery写入页面之前检查它是否已定义。我想将它转换为使用JS条件速记,但由于某些原因,当我这样做时,语句不会执行。这是我的代码:
Original (this works, tested):
if (typeof jQuery == 'undefined') {
document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>');
}
该版本完美无缺。现在我用它替换了它,由于某种原因我遇到了问题:
New w/Shorthand:
(typeof jQuery == 'undefined') ? document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>') : '';
知道这个语法有什么问题吗?
感谢。
答案 0 :(得分:3)
乍一看似乎没有任何问题。 (var JSPATH_REL_symc
在其他地方定义,是吗?)。代码有点时髦(混合字符串连接和document.write
- document.write(str, str2 + str3, str4)
的多个参数),但这很容易修复。此外,您应该能够进一步简化(和缩短)代码:
this.jQuery || document.write('<script src="'
+ JSPATH_REL_symc
+ 'jquery-1.4.2.min.js"><\/script>');
type
标记的script
属性不是必需的,所有浏览器都会隐式评估其内容或链接文件为JavaScript。
快速测试显示此代码的运行情况:http://jsfiddle.net/ZWQqM/(减去JSPATH参数,并在脚本标记中添加“onload”事件属性以证明它成功。)
答案 1 :(得分:1)
你的代码看起来有点不稳定,因为你实际上没有在条件的第二部分做任何事情,这可能导致语法错误。
基本上,当条件为假时,我认为它正在评估:
'';
无效。通常,你会这样使用它:
var someString = (someTest == true) ? "Great" : "Bad";
document.write(someString);
因为你在条件中使用document.write
;我认为你有两个选择:
document.write
或试试这个:
// Option 1
document.write((typeof jQuery == 'undefined') ? '<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>' : '');
// Option 2 -- EDIT: This apparently isn't valid syntax due to the : ; at the end. Thanks @LarsH
(typeof jQuery == 'undefined') ? document.write('<script type="text/javascript" src="', JSPATH_REL_symc + 'jquery-1.4.2.min.js','"><\/script>') : ;
就个人而言,我认为if
声明更清晰。
编辑:正如Ryan在下面的评论中所述,'';
是有效的,所以我不太确定为什么特定代码会引发错误。你能给出错误的截图或描述吗?