1

我有一个生成 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 + ''}));
    }
});
4

1 回答 1

5

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

其次,正如@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;
    }
});

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

于 2011-06-12T00:18:58.313 回答