包含jQuery使用JS速记

时间:2010-08-19 21:09:15

标签: javascript jquery

所以我正在开发一个网站,我们需要在将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>') : '';

知道这个语法有什么问题吗?

感谢。

2 个答案:

答案 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;我认为你有两个选择:

  1. 移动document.write
  2. 内的条件
  3. 从条件
  4. 的第二部分删除引号

    试试这个:

    // 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在下面的评论中所述,'';是有效的,所以我不太确定为什么特定代码会引发错误。你能给出错误的截图或描述吗?