jQuery.wrap, где содержимое не является прямым потомком - PullRequest
1 голос
/ 25 февраля 2011

Я пытаюсь обернуть выбранные узлы в нетривиальную структуру, где узел не будет (обязательно) прямым потомком.Кажется, что wrap() недостаточно для использования в однострочнике.

Я получил его для работы, используя replaceWith, используя синтаксис заполнителя для replace исходного HTML.Следующее работает отлично и может быть легко помещено в плагин jQuery.Но мне любопытно, есть ли лучшее решение.

var template = '<div>\
                  <div>...</div>\
                  <div>{{original}}</div>\
                  <div>...</div>\
                </div>';

$('p').each(function() {
  var o = $(this).html();
  $(this).replaceWith(template.replace('{{original}}', o));
});

1 Ответ

1 голос
/ 02 марта 2011

Для более сложных шаблонов вам нужно заглянуть в jQuery Template Plugin . Он все еще находится в бета-версии, но, похоже, он должен обеспечить большую гибкость. Мое оригинальное решение еще более компактно, но использование функции jQuery.tmpl() близко к работоспособному решению.

Для более простых случаев, как описано выше, вам, вероятно, лучше обернуть его в 2-строчный плагин, примерно так :

$.fn.templateWrap = function(template) {
  return this.each(function() {
    var o = $(this).html();
    $(this).replaceWith(template.replace('{{original}}', o));
  });
}

Затем позвоните, используя:

$('#target').templateWrap('<div>...{{original}}...</div>');

(Загрузить jquery.templatewrap.min.js )

...