问题描述
|
我有一个生成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创建脚本中检查变量'included \'。
编辑
添加了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 + \'\'}));
}
});
解决方法
这里有几个问题。首先,尽管有您的解释,但我认为不需要全局变量。这是丑陋且危险的做法-除非您有很好的理由不这样做,否则它应该是函数的返回值。
其次,正如@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;
}
});
顺便说一句,注意我加到您的内部变量中的11。声明变量,对健康有益。