【问题标题】:Check if src exists on the page检查页面上是否存在 src
【发布时间】:2011-06-12 00:02:45
【问题描述】:

我有一个生成 img 标签的脚本,我想确保相同的 img 不会被制作两次。这是我尝试创建的脚本:

var included = 0;
var src = "";

jQuery.fn.checkCard = function() {
    if ($("#L_S_Inner").find($('img').attr(src))){
        included = 0;
    } else {
        included = 1;
    }
}

但是它不起作用。不知道我在这里做错了什么......

它是这样设计的,这样我就可以在我的 img 创建脚本中检查变量“包含”。

编辑

添加了img创建脚本:

$('#Results a').live('dblclick', function() {
    src = $(this).attr('href');
    getC = $(this).attr('class');
    checkCard();

    if (!(checkCard)) {
            $(this).parent().append($('<img />', {'src': src, 'class': 'DCT ' + getC + ''}));
    }
});

【问题讨论】:

  • 这就是全部功能吗?从我看到的 src 被设置为一个空字符串并且从未改变过。如果是这种情况,那么您的 if 语句将永远不会匹配您页面上的任何图像,因为它们都(可能)具有 src 属性。
  • 您也可以发布您的图像生成脚本吗?此外,正如所写,@sosborn 的评论似乎回答了您的问题(以及对该评论的 +1!)。

标签: jquery find attr


【解决方案1】:

这里有几个问题。首先,尽管您进行了解释,但我认为不需要全局变量。这是一种丑陋而危险的做法——它应该是函数的返回值,除非你有充分的理由不这样做。

其次,正如@sosborn 所说,该函数没有输入参数 - src 要么是另一个全局变量(您尚未显示),要么代码无法工作。

接下来,find 内部应该有一个选择器,而不是 jQuery 对象,attr 内部应该有一个属性名称(因此,一个字符串"src"),而不是一个值(大概src 包含类似http://...)。

另外,为什么要把它做成一个jQuery插件?

问题的字面解决方法,我会这样做:

var checkCard = function(src) {
    return !!($('#L_S_Inner img[src="' + src + '"]').length);
}

更好的解决方案是通过手动跟踪来记住您创建的图像 - 速度更快。

var included = [];
// ...
// when you make an image
included[src] = true;
// ...
// when you want to know if it is there
if (included.hasOwnProperty(src)) // ...

更新:贴出创建代码后,让我重写第二个解决方案:

var included = [];
$('#Results a').live('dblclick', function() {
    var src = $(this).attr('href');
    var getC = $(this).attr('class');

    if (!included.hasOwnProperty(src)) {
        $(this).parent().append($('<img />', {'src': src, 'class': 'DCT ' + getC + ''}));
        included[src] = true;
    }
});

顺便说一句,请注意我添加到您的内部变量中的vars。声明你的变量,这对健康有好处。

【讨论】:

  • 嘿,return !!( 做什么?
  • @tfbox:将东西转换为布尔值 - 将真实的东西转换为 true,将虚假的东西转换为 false。具体来说,在这种情况下,.length 是一个整数 - 因此,任何 1 或以上到 true0false
  • @Amadan - 添加了创建脚本。很抱歉,我一开始就应该这样做。
  • @Amadan - 真奇怪,我昨天无法让它工作,但我又试了一次,它成功了!感谢您的所有帮助!
猜你喜欢
  • 2012-03-28
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多