Как вы избегаете круглых скобок в селекторе jQuery?

Я пытаюсь проверить, содержит ли внутренний текст td круглые скобки(). Причина в том, что я отображаю отрицательные числа как (1000), и мне нужно преобразовать их в -1000 для выполнения математики. Я пробовал пару разных способов, но, похоже, не понимаю. Я знаю, что есть не-jQuery способы сделать это, но на данный момент это просто прослушивает меня.

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

Это не вызывает ошибки, но не находит внутреннего текста (1000):

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

Другой метод, который я пробовал, был:

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

Это порождает ошибку "Исключение брошено и не поймано". Однако, похоже, это работает и для других персонажей. Пример:.,; < >

Итак, как вы избегаете скобок в jQuery?

Ответ 1

Я думаю, вам придется использовать функцию фильтра, например:

$('#fscaTotals td *').filter(function(i, el) {
    return !!$(el).text().match(/\(/);
});

Изменить: Я думаю, что это ошибка в jQuery :contains().

Ответ 2

Вы можете добавить фильтр RegEx

Этот метод объясняется в этом Запись в блоге

$.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]*\)')")

Кстати, я проверил пример RegEx выше с RegexBuddy, и я думаю, что он правильный для ваших нужд.

Ответ 3

Я не много использую jQuery, но проблема с вашей первой заключается в том, что вы пытаетесь поместить текст, где он должен быть селектором, - тогда вы попытались использовать селектор ": содержит", но затем вы попытались чтобы избежать "(". Вы пробовали $( "# fscaTotals td" ). filter ( ": contains ('(')" )? Использовать содержит, но не пытайтесь избежать скобок.