jQuery: получить атрибут стиля и добавить его к новому <div> - PullRequest
0 голосов
/ 15 июня 2011

В настоящее время у меня есть изображение, подобное этому (созданное CKEditor):

<img src="foo.jpg" style="float: left; margin-left: 20px;" alt="Image text">

Я хочу добавить div вокруг этого изображения и извлечь текст из alt-tag в span.

$(document).ready(function () {
    $("#foo img").each(function() {
        $(this).wrap("<div class='imgtxt' />");
        $(this).after($("<span />").text($(this).attr("alt")));
     });
});

Пока бог!Но я также хочу получить атрибуты стиля из img и добавить его в CSS только что созданного div.Как мне этого добиться?

Ответы [ 5 ]

3 голосов
/ 15 июня 2011

Попробуйте это

$(document).ready(function () {
    $("#foo img").each(function() {
        $(this).wrap("<div class='imgtxt' />");
        $('.imgtxt').attr('style', $(this).attr('style'));
        $(this).after($("<span />").text($(this).attr("alt")));
     });
});
1 голос
/ 15 июня 2011

Вы можете использовать это:

$(document).ready(function () {
    $("#foo img").each(function(index) {
        $(this).wrap("<div id='newdiv" + index + "'" class='imgtxt' />");
        $(this).after($("<span />").text($(this).attr("alt")));
        $("#newdiv" + index).attr('style', $(this).attr('style');
     });
});

Вы в основном создаете уникальный идентификатор для каждого DIV и затем применяете стиль каждый раз

0 голосов
/ 15 июня 2011
$('img').each(function() {
    var alt   = $(this).attr('alt'),
        style = $(this).attr('style');
    $(this).after("<span>" + alt + "</span>")
           .next('span')
           .andSelf()
           .wrapAll('<div class="imgtxt" style="'+style+'"></div>');
});
0 голосов
/ 15 июня 2011

Заменить эту строку $(this).wrap("<div class='imgtxt' />"); на:

$(this).wrap("<div class='imgtxt' style=\"" + $(this).attr("style") + "\" />");

Это берет атрибут стиля изображения и добавляет его к новому div.

0 голосов
/ 15 июня 2011
$(this).closest('div.imgtxt').attr('style', $(this).attr('style'));

closest() захватит ваш div, который вы только что создали. Я также рекомендовал бы изменить код на что-то вроде этого:

$("#foo img").each(function() {
    var $this = $(this);
    $this.wrap("<div class='imgtxt' />");
    $this.after($("<span />").text($this.attr("alt")));
    // etc.
 });

Таким образом, вы не ищите / не создаете объект jQuery каждый раз, когда вызывается $(this)!

...