在jquery中创建嵌套元素

时间:2009-10-28 17:36:43

标签: jquery

我正在尝试用创建的元素替换div,来自:

<div id='links'></div>

<div id='links'>
<ul>
<li><a href='#'>No</a></li>
</li>
</div>

我想将一个函数附加到我创建的<a>元素中的链接。创建所需的链接正在运行,但使用wrap函数将链接包装在<li>元素和<ul>元素中不起作用:

var no = $('<a>').attr({
    href: '#'
  }).click(function () {
    alert('clicked no');
    return false;
  }).text('no');

可以使用,但是no.wrap('<li></li>');仍然只是给了我一个未包装的<a>元素。 我也试过$('#links').append('<ul>').append('<li>').append(no),但这也不起作用。

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

no.wrap('<li></li>')仍会返回<a>元素,但会在其周围添加<li>元素。所以你可以no.wrap('<li></li>').parent()来包装它并返回<li>元素。

答案 1 :(得分:1)

<script type="text/javascript">
$(function(){

    var list = $("<ul />");

    var no = $('<a />')
        .attr({ href: '#' })
        .click(function () {
            alert('clicked no');
            return false;
        })
        .text('no')
        .wrap("<li />")
            .parent()
            .appendTo(list);

    list.appendTo("#links");
});    
</script>

答案 2 :(得分:0)

使用jQuery实际上可以将所有内容嵌套到包装器中,特别是如果您不需要自己处理单个项目。

您还可以创建要动态嵌套的新元素。无需创建一堆临时变量来保存它们。

只需将所有项目作为单独的参数传递给append(),即可同时追加多个项目。

var wrapper = $('<div/>', {
  id: 'links'
});

$(wrapper).append(

  $('<ul/>').append(

    $('<li/>').append(
      $('<a/>', {
        href: '#',
        text: 'Yes'
      })
    ),

    $('<li/>').append(
      //you can even keep going! 
      $('<a/>', {
        href: '#',
        text: 'No'
      })
    ),

    $('<li/>').append(
      $('<a/>', {
        href: '#',
        text: 'Maybe'
      })
    )
  )

);