JQuery: обернуть недавно созданный HTML - PullRequest
5 голосов
/ 12 января 2011

Я создаю фрагмент HTML на лету:

$('<span/>').addClass(spanClass)

Есть ли способ jQuery, чтобы обернуть этот код в <div>?

Семантически я хочу сделать:

$('<span/>').addClass(spanClass).wrap($('<div/>').addClass(divClass))

это не работает. Так что я просто хочу следующую jQuery-idiomatic версию:

function wrap(what, with) { return $(with).append(what); }

Ответы [ 4 ]

11 голосов
/ 12 января 2011

Имейте в виду, что ваш объект jQuery все еще ссылается на новый <span>, поэтому, если вы пытаетесь вставить его цепным методом, <div> не будет вставлен.

Вчтобы преодолеть это, вам нужно сначала перейти к новому родителю <div>.

    // Traverse up to the new parent in order to append the <div> and <span>
$('<span/>').addClass(spanClass).wrap($('<div/>').addClass(divClass))
            .parent().appendTo('body');

Вы также можете написать это так:

$('<span/>').addClass(spanClass).wrap('<div/>')
            .parent().addClass(divClass).appendTo('body');
4 голосов
/ 12 января 2011
$('<div/>', {'class': divClass}).append($('<span/>', {'class': spanClass}));
1 голос
/ 12 января 2011

Почему бы и нет:

$('<div/>').addClass(divClass).append($('<span/>').addClass(spanClass));

IE сначала создает ваш div?

0 голосов
/ 12 января 2011

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

$('<span/>').addClass(spanClass).wrap($('<div/>').addClass(divClass).html()); 

или

$('<div/>').addClass(divClass).append($('<span/>').addClass(spanClass));
...