2010-05-30 94 views
0

我构建<li>元素是这样的:只有在li元素尚未存在的情况下才添加li元素?

var element = $("<li></li>") 
    .html(mHTML) 
    .attr('id', "elemid"); 

我想这个元素添加到,只有当它不存在一个<ul>元素。任何想法如何做到这一点?我是否应该使用来查看ul元素是否包含html,然后决定?例如,

<ul id="elemul"> 
    <li id="elemli1">Element 1</li> 
    <li id="elemli2">Element 2</li> 
    <li id="elemli3">Element 3</li> 
</ul> 

如果我尝试添加元素1,它不应该添加它。如果它的字符串较长(不是很长,但大约有150个字符),我该怎么办?

注:我不能依靠ID来确定唯一性。即我可能最终形成类似的东西:<li id="elemli3">Element 1</li>

我会去使用hashmaps吗?

+0

@Delan:感谢您的固定标签。 :) – Legend 2010-05-30 06:02:46

+0

没问题。 :-) – 2010-05-30 06:07:17

回答

2
if(!$('#elemul li:contains("Element 1")').length) 
{ 
    $('#elemul').append($('li').attr('id', 'elemli1').text('Element 1')); 
} 
+0

根据OP的要求,这是正确的。不幸的是,在大多数情况下,'contains'几乎是无用的。它是区分大小写的,你不能把它限制在整个比赛中; 'li:contains(“元素1”)'也会得到'

  • 元素100
  • '。将这些数据保存在一个变量中,而不是在DOM中可能会更好。 – Kobi 2010-05-30 09:18:15

    2

    我不是一个jQuery用户,请耐心等待。但是,原生JavaScript可以很容易地转换成jQuery代码。

    if (!document.getElementById('elemli1')) { 
        var elemli1 = document.createElement('li'); 
        elemli1.id = 'elemli1'; 
        document.getElementById('elemul').appendChild(elemli1); 
    } 
    

    如果你想如果没有列表项列表中的所有创建一个元素,更换,如果表达式:

    !document.getElementById('elemul').childNodes.length 
    
    +0

    感谢您的提示。对不起,我不清楚。在我的情况下,内容可能会带有不同的ID。刚更新了我的帖子。 – Legend 2010-05-30 06:05:23

    +0

    好吧。更新我的帖子以获得更有帮助的答案。 – 2010-05-30 06:09:13

    +0

    +1小费德兰。我现在正在学习jQuery,所以我正在寻找更多的jQuerish方法:)感谢您的时间。 – Legend 2010-05-31 01:25:30