Как получить значение атрибута, поскольку он кэшируется в JavaScript? - PullRequest
1 голос
/ 27 января 2011

Я пытаюсь передать оба значения тега src и rel. Вот пример ввода.

<img class="image" src="example.jpg" title="" rel="value" />

Ниже приведен код, который анализирует все теги <img> на странице.

add: function(src, rel) {
    if (this.cache[src]) {
        return this.cache[src];
    }
        if (this.cache[rel]) {
            return this.cache[rel];
        }
    var image = new Image();
    image.src = src;
        image.rel = rel;
    this.setStyle(image, {display: 'block'});
    if (image.complete && image.width) {
        return image;
    }
    image.onload = (function(scope) {
        return function() {
            scope.cache[src] = image;
        };
    })(this);
        jQuery(image).attr('rel', function() { image.rel } );
    return image;
},

Однако, это мой вывод.

<img src="example.jpg" style="display: block;" />

Как будто он полностью игнорирует тег rel. Мне нужно передать значение тега rel из старого <img> в новое <img>.

1 Ответ

1 голос
/ 27 января 2011

Код устанавливает свойства. Не уверен, но если свойство rel не отображается на атрибут, оно не будет отображаться.

Кроме того, jQuery немного запутывает различия между атрибутами и свойствами, поэтому я не уверен, как он обрабатывает rel.

Когда вы устанавливаете rel, добавьте setAttribute() вызов.

var image = new Image();
image.src = src;
image.rel = rel;
image.setAttribute('rel',rel);

Ваш исходный код вызывает установку свойства rel, но не атрибута. Это фактически установит атрибут.

Вы должны быть в состоянии избавиться от этой строки:

jQuery(image).attr('rel', function() { return image.rel } );

EDIT:

Вот альтернативное решение:

Похоже, что если вы сначала установите image.rel = rel;, jQuery не будет работать. Избавьтесь от этой строки, и код jQuery будет работать.

...