我正在尝试检查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中转义括号?
答案 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,但不要试图逃避括号。