选择所有以'+'开头的<a>元素

3
我希望使用jQuery选择所有内容以“+”开头的元素,该怎么做?
示例:
<a href="/" >+ Add</a>

好的,继续操作吧。这不是代码生成服务。 - Lightness Races in Orbit
如果您能够编辑HTML,则只需将class="add"添加到链接中,然后使用$(".add")来选择它们。我发现这比在元素中匹配文本更清晰。 - Adam Tomat
4个回答

6
你可以使用 jQuery 中的 filter() 方法:
$("a").filter(function() {
    return $.trim(this.innerHTML).indexOf("+") === 0;
}). ...

演示: http://jsfiddle.net/4rgNw/


它应该是indexOf('+') !== -1。 - rab
1
@rab:不是的,作者要求文本以“+”开头的元素,即位置为0。 - Andy E
只是出于好奇,你为什么要使用 $.trim()?它似乎在没有它的情况下也能正常工作:http://jsfiddle.net/chrisJamesC/4rgNw/1/ - Christopher Chiche
谢谢您的回答,另外我想用"-"替换所有这些元素的第一个字符。但是我无法通过以下代码实现:'$("a").filter(function () {return $.trim(this.innerHTML).indexOf("+") === 0;}).each(function () { $(this).replace("+", "-"); });' - Wartodust
@andyE,使用/^\s*\+/.test( this.innerHTML )怎么样? - rab

0
这里有一种替代的、更加CSS驱动的方法,你甚至可以让你的CSS来处理添加加号符号。检查一个类会比检查元素的innerHTML要好得多,只有当你有大量的+链接时才真正重要。 jsFiddle HTML
<a href="/" class="add">Add</a>
<a href="/" class="add">Add</a>

CSS

.add:before { content:"+ "; }

jQuery

var addLinks = $('.add');

// or pure JS (faster if you only desire the DOM objects)
addLinks = document.getElementsByTagName('add');

0
var links = document.links, l = links.length, i, plus = [];
for (i = 0; i < l;i++){
    if(/\+\w/(links[i].textContent))plus.push(links[i]);
};

编辑:

var links = document.links, l = links.length, i, plus = [];
for (i = 0; i < l;i++){
    if(/\+\w/.test(links[i].textContent))plus.push(links[i]);
};

这段代码看起来有问题,你需要在正则表达式上执行一个函数,比如test,或者在带有正则表达式参数的字符串上执行一个函数,比如match。 - jcubic

0
在CSS3中,有一个:contains()选择器,可能也会有用。
$('a:contains("+ ")').....

举个例子.. 不完全是你要找的,但可能会有用。


1
不行。:contains 在字符串中搜索存在,不能用于*"以...开头"*的情况。 - VisioN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接