2012-01-08 124 views
0

我有这样的事情HTML代码:查找并与特定的文本替换HTML元素

<ul>
<li><a href="#">21</a></li>
<li><a href="#">10</a></li>
<li><a href="#">6</a></li>
<li><a href="#">1</a></li>
<li><a href="#">7</a></li>
<li><a href="#">5</a></li>
</ul>

我想打一个jQuery代码,添加类与给文本中的链接(公告必须完全是文字)。 例如,如果我叫Method(1, "replaced text")那么这必须是HTML结果:

<ul>
<li><a href="#">21</a></li>
<li><a href="#">10</a></li>
<li><a href="#">6</a></li>
<li><a class="myclass" href="#">1</a>replaced text</li>
<li><a href="#">7</a></li>
<li><a href="#">5</a></li>
</ul>

+0

我不能用包含jquery选择器来做到这一点 – 2012-01-08 10:05:04

+0

':contains'完全匹配文本*,不过。 – 2012-01-08 10:08:55

+1

为什么你不能使用包含? – redmoon7777 2012-01-08 10:13:57

回答

1

您可以使用filter()的元素匹配,那么连锁addClass()after()

$("li > a").filter(function() { 
    return $(this).text() == "1"; 
}).addClass("myclass").after("replaced text"); 
0

jQuery提供a selector

$('a:contains(10)').addClass('myclass'); 

http://jsfiddle.net/8zmus/

+0

不适用于'$('a:contains(1)')。addClass('myclass') ;'cite:“请注意,必须是文本” – 2012-01-08 10:14:47

+1

'$('a:contains(1)')。addClass('myclass');'选择'1','10'和'21' ... – Andreyco 2012-01-08 10:29:57

+0

没错。不明白“必须是正文的通知”。或者玛比,当我读到这个问题时,它不在吗? – bjelli 2012-01-08 18:18:48

1
尝试代码

试试看:

function someName(niddle, new_text) 
{ 
    $('ul a').each(function(){ 
     if($(this).text() == niddle){ 
      $(this).addClass('myclass'); 
      $(this).after(new_text); 
     } 
    }); 
} 
+0

我编辑过。这里是小提琴http://jsfiddle.net/YWeBE/ – redmoon7777 2012-01-08 10:20:40

0

jQuery的不提供“这个确切的文字”一个选择,但它很容易写(laaeftr) 。您还可以使用更灵活的“匹配”选择,这对正则表达式的文本(无定界符给出)相匹配:

$.extend($.expr[':'], { 
    matches: function (el, index, m) { 
     var s = new RegExp(m[3]); 
     return s.test($(el).text()); 
    } 
}); 

一旦我们得到了,剩下的就是简单:

$("li > a:matches(^10$)").addClass("foo") 

http://jsfiddle.net/am7rY/