Ответ 1
Я думаю, вам придется использовать функцию фильтра, например:
$('#fscaTotals td *').filter(function(i, el) {
return !!$(el).text().match(/\(/);
});
Изменить: Я думаю, что это ошибка в jQuery :contains()
.
Я пытаюсь проверить, содержит ли внутренний текст 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?
Я думаю, вам придется использовать функцию фильтра, например:
$('#fscaTotals td *').filter(function(i, el) {
return !!$(el).text().match(/\(/);
});
Изменить: Я думаю, что это ошибка в jQuery :contains()
.
Вы можете добавить фильтр 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, и я думаю, что он правильный для ваших нужд.
Я не много использую jQuery, но проблема с вашей первой заключается в том, что вы пытаетесь поместить текст, где он должен быть селектором, - тогда вы попытались использовать селектор ": содержит", но затем вы попытались чтобы избежать "(". Вы пробовали $( "# fscaTotals td" ). filter ( ": contains ('(')" )? Использовать содержит, но не пытайтесь избежать скобок.