jQuery .attr () чувствителен к регистру - PullRequest
2 голосов
/ 18 мая 2011

У меня есть элемент select с несколькими пользовательскими атрибутами, которые я использую для проверки его на лету и отображения соответствующих сообщений.Имя атрибута указано как верблюжий, как в

<select validationMessage="Must select something" ... >...

Проблема в том, что в версии jQuery старше 1.6 .attr(), похоже, учитывается регистр.Что еще более проблематично, так это то, что он не будет извлекать атрибуты в исходном регистре.Это работает так же в Firefox в Chrome, но работает должным образом (без учета регистра) в Internet Explorer.Также интересно, что любой корпус (кроме оригинального) работает.

Вот пример JSFiddle этой проблемы.Вы можете изменить версию jQuery lib слева и нажать «Выполнить», чтобы проверить, как она работает с другими версиями.

Как мне решить эту проблему?

Ответы [ 2 ]

8 голосов
/ 18 мая 2011

jQuery изменил способ работы attr() в 1.6.До этой версии attr() в основном отображались непосредственно в свойствах под капотом - а не в атрибутах, как можно подумать.Поскольку имена свойств DOM обычно представляют собой одиночные слова, jQuery преобразовал большинство строк, переданных в нижний регистр, и сделал исключения для нескольких имен свойств, которые были обработаны верблюдами.Причина, по которой jQuery вел себя таким образом, заключалась в устранении несоответствий и ошибок браузера в getAttribute() и setAttribute().

Начиная с jQuery 1.6, метод .attr () возвращает неопределенные атрибуты, которые небыл установлен.Кроме того, .attr () не должен использоваться для простых объектов, массивов, окна или документа.Чтобы получить и изменить свойства DOM, используйте метод .prop (). источник

В 1.6 attr() отображается на getAttribute() под капотом и новый *Метод 1022 * извлекает значения свойств.

Разница между атрибутами и свойствами может быть важной в определенных ситуациях.До версии jQuery 1.6 метод .attr () иногда учитывал значения свойств при извлечении некоторых атрибутов, что могло вызвать противоречивое поведение.Начиная с jQuery 1.6, метод .prop () предоставляет способ явного получения значений свойств, в то время как .attr () извлекает только атрибуты. источник

2 голосов
/ 18 мая 2011

Если вы замените attr() на javascript-эквивалент getAttribute(), похоже, что он не чувствителен к регистру.

Единственный недостаток заключается в том, что вы должны get() сначала объект js:

sel.get(0).getAttribute("validationMessage")

Смотрите результат здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...