Проверьте, существует ли src на странице - PullRequest
1 голос
/ 12 июня 2011

У меня есть скрипт, который генерирует теги 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.

EDIT

Добавлен скрипт создания 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 + ''}));
    }
});

1 Ответ

5 голосов
/ 12 июня 2011

Несколько проблем здесь. Прежде всего, несмотря на ваше объяснение, я не вижу необходимости в глобальной переменной. Это уродливая и опасная практика - это должно быть возвращаемое значение функции, если только у вас нет веских причин не делать этого таким образом.

Во-вторых, как говорит @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, которые я добавил к вашим внутренним переменным. Объявите свои переменные, это полезно для здоровья.

...