1

我试图将选定的节点包装在一个非平凡的结构中,其中节点不会(必然)是直接后代。似乎wrap()不足以在单线中使用。

我使用, 使用原始 HTML 的replaceWith占位符语法让它工作。replace以下工作正常,可以很容易地包装在一个 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));
});
4

1 回答 1

1

对于更复杂的模板,您需要查看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

于 2011-03-01T22:56:21.270 回答