jQuery.wrap 其中内容不是直接后代

发布于 2024-10-19 06:27:39 字数 550 浏览 2 评论 0原文

我试图将选定的节点包装在一个不平凡的结构中,其中该节点将(不一定)是直接后代。看起来 wrap() 不足以在单行中使用。

我使用 replaceWith 让它工作,使用占位符语法替换原始 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));
});

I am trying to wrap selected nodes in a non-trivial structure, where the node will not (necessarily) be a direct descendant. It seems that wrap() is insufficient to use in a one-liner.

I got it to work using replaceWith, using placeholder syntax to replace the original HTML. The following works fine and could easily be wrapped in a jQuery plugin. But I am curious if there is a better solution.

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一梦浮鱼 2024-10-26 06:27:39

对于更复杂的模板,您需要查看 jQuery 模板插件。它仍处于测试阶段,但看起来应该提供很大的灵活性。我原来的解决方案仍然更紧凑,但使用 jQuery.tmpl()< /a> 函数接近可行的解决方案。

对于更简单的情况,如上所述,您可能最好将其包装在 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)

For more complex templates, you will want to look into the jQuery Template Plugin. It's still in beta, but it looks like it should provide a lot of flexibility. My original solution is still more compact, but using the jQuery.tmpl() function is close to a workable solution.

For the simpler cases, as described above, you're probably better off wrapping it in a 2-line plugin, like so:

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

Then call it using:

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

(Download jquery.templatewrap.min.js)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文