你如何在jQuery选择器中转义括号?

时间:2009-07-20 18:45:35

标签: jquery

我正在尝试检查td innertext是否包含括号()。原因是我将负数显示为(1000),我需要将它们转换为-1000才能进行数学运算。我尝试了几种不同的方法,但似乎无法做到正确。我知道有非jQuery的方法可以做到这一点,但在这一点上它只是困扰我。

$(tdElement[i]).find("\\(").length > 0 

这不会抛出错误,但它找不到(1000)的innertext:

$(tdElement[i]).find("\\(")
{...}
    context: {object}
    jquery: "1.3.1"
    length: 0
    prevObject: {...}
    selector: "\("

我尝试的另一种方法是:

$("#fscaTotals td").filter(":contains('\\(')")

抛出错误“异常抛出但未捕获”。它似乎适用于其他角色。示例:。 ,; < >

那么,你如何在jQuery中转义括号?

3 个答案:

答案 0 :(得分:9)

我认为你必须使用像:

这样的过滤功能
$('#fscaTotals td *').filter(function(i, el) {
    return !!$(el).text().match(/\(/);
});

编辑:我认为这是jQuery :contains()中的一个错误。

答案 1 :(得分:3)

您可以添加RegEx过滤器

此技术在此Blog Entry

中进行了解释
$.extend($.expr[':'], {  
    regex: function(a, i, m, r) {  
        var r = new RegExp(m[3], 'i');  
        return r.test(jQuery(a).text());  
    }  
});

然后你可以像这样使用正则表达式。

("#fscaTotals td:regex('\([0-9]*\)')")

顺便说一下,我用RegexBuddy测试了上面的RegEx示例,我认为这对你的需求是正确的。

答案 2 :(得分:-1)

我没有太多使用jQuery,但是你的第一个问题是你试图将文本放在应该是选择器的地方 - 然后你尝试使用选择器“:contains”,但你尝试了逃避“(”。你试过$(“#fscaTotals td”)。filter(“:contains('(')”)?使用contains,但不要试图逃避括号。