Специальные символы в селекторе jQuery в IE7 - PullRequest
2 голосов
/ 28 января 2012

Моя клиентская база - IE8 и 7, так что терпите меня.

У меня есть объекты на странице, которые представляют иерархию - подумайте о структуре заказов / линейных позиций. Объект на странице -

<input type="text" name="Orders[0].LineItems[1]_lineItemTotal" />

Я вижу проблему, когда только в IE7 этот селектор не будет работать:

var total = $('[name="Orders[0].LineItems[1]_lineItemTotal"]').val();

Отслеживая это, кажется, что если мы избежим периода, мы можем сделать эту работу:

var total = $('[name="Orders[0]\\.LineItems[1]_lineItemTotal"]').val();

Меня беспокоит то, что проблема не в самом периоде, так как это работает просто отлично:

var orderId = $('[name="Orders[0].OrderId"]');

У кого-нибудь есть понимание того, что происходит, или лучший способ подойти к этому? Я довольно сильно вложился в схему именования элементов HTML, и это стало известно только тогда, когда QA-тестирование на IE7 - Chrome, IE9, IE8 и т. Д., Кажется, справляется с этим очень хорошо.

Я использую jQuery 1.7.1.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Чтобы сделать вещи еще более странными, это выглядит как название Orders [0]. 1 _lineItemTotal работает просто отлично, но как только вы добавляете какой-либо не специальный символ после этого периода, он перестает работать!

Я думаю, что обратный слеш - лучший подход на данный момент.

Документация jQuery предоставляет некоторую информацию об экранировании символов в селекторах CSS, но это не должнопримените здесь, где вы устанавливаете атрибут.

0 голосов
/ 28 января 2012

Возможно, это не самое рекомендуемое решение, просто предложение, если вы действительно разочарованы, вы не можете назначить более доступное имя и определенно не можете найти способ заставить работать этот атрибут имени =)

var total = 0;
$('input[type=text]').each(function() {
  if ($(this).attr('name') == 'Orders[0].LineItems[1]_lineItemTotal') {
    total = $(this).val();
    return false;
  }
}
...