包裹在标签中的 jquery DOM 对象最终会自行结束?

发布于 2024-12-01 16:25:27 字数 538 浏览 4 评论 0原文

我正在尝试将 jQuery 对象包装在列表中。对象是

<a class="medium button" title="Title"">Sample</a> 

和交互

$(".medium").click(function() {
  $(".list4").append("<li>");
  $(".list4").append($(this));
  $(".list4").append("</li>");
});

,但这不可避免地会出现在空白列表项中。但如果我做类似的事情,

$(".medium").click(function() {
  $(".list4").append("<li>");
  $(".list4").append($(this).html());
  $(".list4").append("</li>");
});

该项目就没有链接。我应该怎么办?

I'm trying to wrap a jQuery object in a list. The object is

<a class="medium button" title="Title"">Sample</a> 

and the interaction

$(".medium").click(function() {
  $(".list4").append("<li>");
  $(".list4").append($(this));
  $(".list4").append("</li>");
});

but this inevitably ends up in a blank list item. But if I do something like

$(".medium").click(function() {
  $(".list4").append("<li>");
  $(".list4").append($(this).html());
  $(".list4").append("</li>");
});

the item doesn't have the link. What should I do?

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

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

发布评论

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

评论(3

等风来 2024-12-08 16:25:27

这是另一种方法:

$(".medium").click(function() {
  $("<li />").append(this).appendTo('.list4');
});

或者如果您想将元素保留在原来的位置,您可以克隆它:

$("<li />").append($(this).clone()).appendTo('.list4');

@Marc B 已经在他的回答中解释了,每个append 插入一个新的 DOM 节点,而不仅仅是 HTML 文本。当您调用 $element.append('

') 时,浏览器(甚至 jQuery)将更正“损坏的”HTML。

Here is another way:

$(".medium").click(function() {
  $("<li />").append(this).appendTo('.list4');
});

or if you want to leave the element at it's original place, you can clone it:

$("<li />").append($(this).clone()).appendTo('.list4');

As @Marc B already explained in his answer, every append inserts a new DOM node, not just HTML text. When you call $element.append('<div>'), then the browser (or even jQuery) will correct the "broken" HTML.

时光倒影 2024-12-08 16:25:27

尝试

$('.list4').append('<li>' + $(this).html() + '</li>');

每个追加操作生成至少一个新节点。像这样调用 3 次会生成 3 个新节点。因此...嵌入要附加的完整 HTML 代码段,这将生成一个新的

  • try

    $('.list4').append('<li>' + $(this).html() + '</li>');
    

    each append operation generates at least one new node. Calling it 3 times like that generates 3 new nodes. So... embed a full HTML snippet to be appended, which'll generate just one new <li>

    哀由 2024-12-08 16:25:27
    $(".medium").click(function() {
      $(".list4").append("<li></li>");
      $(".list4 li").append($(this));
    });
    

    你尝试过吗?

    $(".medium").click(function() {
      $(".list4").append("<li></li>");
      $(".list4 li").append($(this));
    });
    

    Have you tried that?

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