Установка нескольких атрибутов с помощью .attr () - PullRequest
1 голос
/ 23 июня 2011

У меня здесь есть функция:

РЕДАКТИРОВАТЬ: дал вам полный код здесь!

$(".thumbnail").live("click",
    function(){
    $('#imageBig').find("#pictureContainer").remove();

    $('#loadingImage').fadeIn();

    var path = $(this).children().attr("src");
    var newPath = path.substring(0, path.length-9);
    var newPath2 = newPath += ".jpg";

    var imageLoad = new Image();

    $(imageLoad).load(function () {
        if (--imageLoad == 0) {
            // ALL DONE!
        }
        // anything in this function will execute after the image loads
        $('#loadingImage').fadeOut();
        var newImg = $('<img />').attr('src',$(this).attr('src'));
        newImg.css("height","400px").css("width","600px");
        $('#imageBig').append( $(newImg) );
    })
    .attr({
        src:newPath2,
        id:"pictureContainer"
    });
})

Моя проблема с .attr ()

При загрузке изображения оно меняет src (так работает строка 1 "src:newPath2"), но не устанавливает id.Поэтому, когда мое изображение создается, оно делает только: <img src="newpath2" />.Без идентификатораЯ делаю что-то неправильно?Я проверил документацию jquery несколько раз, и я почти уверен, что именно так это и делается.

Я думаю, что проблема связана с .load (), но я не уверен, что не работает.

Спасибо!

(если вам нужно, я могу дать вам код до этого)

решено:

Простодолжен дать идентификатор newImg вместо imageLoad.

Ответы [ 3 ]

1 голос
/ 26 июля 2013

Сеттер и геттер!

(function($) {
    // Attrs
    $.fn.attrs = function(attrs) {
        var t = $(this);
        if (attrs) {
            // Set attributes
            t.each(function(i, e) {
                var j = $(e);
                // Aplica atributos
                for (var attr in attrs) {
                    j.attr(attr, attrs[attr]);
                };
            });
            return t;
        } else {
            // Get attributes
            var a = {},
                r = t.get(0);
            if (r) {
                r = r.attributes;
                for (var i in r) {
                    var p = r[i];
                    if (typeof p.nodeValue !== 'undefined') a[p.nodeName] = p.nodeValue;
                }
            }
            return a;
        }
    };
})(jQuery);

Использование:

// Setter
$('#element').attrs({
    'name' : 'newName',
    'id' : 'newId',
    'readonly': true
});

// Getter
var attrs = $('#element').attrs();
1 голос
/ 23 июня 2011

newImg имеет тот же SRC из-за $('<img />').attr('src',$(this).attr('src')), но не тот же ID, тогда я думаю, что вы добавляете (и ссылаетесь на) newImg, поэтому вы должны дать идентификатор для newImg вместо loadImage.

0 голосов
/ 23 июня 2011

Я могу быть немного смущен тем, что вы пытаетесь сделать, но почему бы просто не сделать:

var newImg = $('<img />').attr('src',$(this).attr('src')).attr('id',$(this).attr('id'));

Разве это не даст вам идентификатор?

...