【问题标题】:cannot call method replace on undefined script issues无法在未定义的脚本问题上调用方法替换
【发布时间】:2013-03-09 19:03:46
【问题描述】:

由于我无法访问我的网站的 PHP,我正在尝试执行以下操作,我正在使用此代码来解决它。它将搜索包含下面列出的两个的任何链接。一个来自 youtube 的 /watch?在它和另一个来自 youtube 的 URL 中只有 /v。它还在搜索任何嵌入的元素。问题是当我运行脚本时,由于错误,它会破坏所有其他代码。

未捕获的类型错误:无法调用未定义的“替换”方法

真是头疼啊!所以我把它交给 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'
        }
    });
});

【问题讨论】:

  • 您的代码仅在您的变量未定义时运行。为什么?
  • 真的等一下吗?我刚刚了解到 typeof var !== "undefined" 区域是否意味着它不是未定义的?
  • !== 表示“不等于”; === 表示“完全相等”

标签: javascript jquery if-statement undefined typeof


【解决方案1】:

您将它与一个未定义的字符串进行比较,而您应该将其与实际的保留字进行比较:

if(typeof wt !== undefined)

你也可以这样做:

if(wt !== "undefined")

顺便说一句,你正在做的是,如果它不是未定义的 - 什么都不做,否则 - 做一些事情,这真的是你想要的吗?

【讨论】:

  • typeof 实际上确实返回了一个字符串,因此针对字符串进行测试是绝对正确的...请先在控制台中测试答案。
  • 好吧,我以前从未使用过这种类型。所以基本上你的意思是如果脚本未定义并且我的 else 语句真的毫无意义,我正在运行脚本,所以我应该删除我的 else 语句并将代码放在实际的 if 中。
  • 哦,傻傻的我!大声笑,我感到很尴尬,谢谢。你能向我解释一下这一切意味着什么吗?我正在自学我编写的大部分代码,所以是的。我知道如果 else if 是什么,typeof!== 是什么?
  • @ftom2 那个小提琴应该显示什么? p 元素没有 href 属性,所以它 is 未定义,因此 typeof href !=="undefined" 为假,typeof href !==undefined 为真(字符串“未定义”不等于未定义)
  • @DavidMcMullin - 大声笑,最后一条评论是为了回答 OP 评论而不是为你...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2016-12-10
  • 2013-01-27
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多