2013-03-09 86 views
0

我在下面试图做什么,因为我没有访问到我的网站的PHP,我使用此代码来解决它。它将搜索包含下面列出的两个链接的任何链接。一个来自youtube的/ watch?在其中,另一个来自youtube,只有/ v在url中。它也在搜索任何嵌入的元素。问题是,当我运行该脚本时,由于错误而打破了所有其他代码。无法调用方法替换未定义的脚本问题

Uncaught TypeError: Cannot call method 'replace' of undefined

这是一个痛苦的屁股!所以我把它交给了FF,说变量WT没有被明确定义。那么它可能不是因为我在if语句的范围之外使用它。我不知道如何确保链接是否存在运行代码。以及如果嵌入存在也运行代码。这些将发布在我的用户信息中,并希望它们自动更改为与我的fancybox一起工作。

Here is a live example

它从我的网页复制标记具有快速链接CSS所以不介意车的样子。

$(function() { 
    //if link contains /watch? 
    var t = $('.entry-content div div a[href*="youtube.com/watch?"]').attr('href'); 
    if(typeof t !== "undefined") { 
     //do nothing don't run the script below 
    } else { 
     var d = $('.entry-content div div a[href*="youtube.com/watch?"]'); 
     var newsrc = t.replace('watch?',''); 
     var asrc = newsrc.replace('=','/'); 
     var g = asrc.replace('http://www.','http://img.'); 
     var s = g.replace('v','vi'); 
     d.attr('class','ez_video'); 
     d.attr('href', asrc).html('<img src="'+ s +'/0.jpg"/>'); 
    } 
    //if link contains /v 
    var wt = $('.entry-content div div a[href*="youtube.com/v"]').attr('href'); 

    if(typeof wt !== "undefined") { 
     //do nothing don't run script below 
    } else { 
     var wd = $('.entry-content div div a[href*="youtube.com/v"]'); 
     var o = wt.replace('http://www.','http://img.'); 
     var v = o.replace('v','vi'); 
     wd.attr('class','ez_video'); 
     wd.attr('href', v).html('<img src="'+ v +'/0.jpg"/>'); 
    } 

    //if embeded file 
    var src = $('.entry-content').find('embed').attr('src'); 
    if (typeof src !== "undefined") { 
     //do nothing again unless true run script below 
    } else { 
     var qload = src.replace('http://youtube.com/v/',''); 
     var y = src.replace('http://','http://img.'); 
     var imgsrc = y.replace('v','vi'); 
     $('embed').before('<a class="ez_video" id="' 
      + qload +'" href="'+ src +'"><img src="' 
      + imgsrc +'/0.jpg" tile="" alt=""/></a>'); 
     $('embed').remove(); 

    } 
    //Now make all work with the fancybox 

    $('.ez_video').fancybox({ 
     'autoScale'  : false, 
     'transitionIn' : 'elastic', 
     'transitionOut' : 'elastic', 
     'width'   : 854, 
     'height'  : 480, 
     'type'   : 'swf', 
     'swf'   : { 
      'wmode'    : 'transparent', 
      'allowfullscreen' : 'true' 
     } 
    }); 
}); 
+1

只有当您的变量__are__未定义时,您的代码才会运行。为什么? – Mathletics 2013-03-09 19:15:40

+0

真的吗?我只知道typeof var!==“未定义”区域是否意味着它不是未定义的? – EasyBB 2013-03-09 19:27:50

+1

'!=='表示“不等于”; '==='意思是“精确相等” – Mathletics 2013-03-09 21:30:23

回答

0

你比较它的不确定的字符串,而你应该比较其实际的保留字:

if(typeof wt !== undefined) 

你也可以这样做:

if(wt !== "undefined") 

顺便说一句,你是什么做的是,如果它不是没有定义 - 什么都不做,别的 - 做点什么,这真的是你想要的吗?

+1

typeof确实会返回一个字符串,因此对字符串进行测试绝对正确......请先在控制台中测试答案。 – 2013-03-09 19:34:45

+0

那么我从来没有使用过这种类型。所以基本上你说的是,如果我的脚本没有定义,而我的其他语句真的没有意义,我就运行这些脚本,所以我应该擦除我的else语句并将代码放在实际的if中。 – EasyBB 2013-03-09 19:36:43

+1

EasyBB - 是的,@DavidMcMullin - 看到这个小提琴:http://jsfiddle.net/mHmNQ/1/ – Tomer 2013-03-09 19:37:40

相关问题