Ответ 1
Побег с двумя (2) обратными слешами.
Кто-нибудь знает, как избежать использования символа квадратной скобки при установке имени класса с помощью jQuery?
Попробуйте следующее:
$('#txtFirstname').addClass('test[someval]')
затем
$('#txtFirstname').attr('class')
вы увидите, что класс там.
Теперь попробуйте
$('#txtFirstname').hasClass('test[someval]')
СБОЙ
Единственная причина, по которой я могу придумать, это квадратные скобки.
И мне нужно это для моей проверки JQuery, вы видите.
Побег с двумя (2) обратными слешами.
Введение страницы jQuery API дает следующее объяснение:
Чтобы использовать любой из метасимволов (например,! "# $% & '() * +,./:; <= > ? @[] ^` {|} ~) как буквальная часть имени, она должна сбежать с двумя обратными косыми чертами: \\.
Если селектор содержится внутри переменной (или если вы можете получить ее в переменной), приведенный ниже код может быть полезен:
selector_name = $this.attr('class');
//e.g selector_name = users[0][first:name]
escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//e.g escaped_selector_name = users\\[0\\]\\[first\\:name\\]
Короче говоря, мы префикс всех специальных символов с двойным обратным слэшем. Вот еще дополнительная документация с сайта jQuery:
Краткий ответ: вам не нужно заключать в скобки, поскольку аргументом является имя класса, а не селектор. Он не работает для вас из-за ошибки в более ранних версиях jQuery, которая уже давно исправлена.
Чтобы продемонстрировать это, здесь ваш код работает под разными версиями:
$('#txtFirstname').addClass('test[someval]')
$('#txtFirstname').attr('class')
console.log($('#txtFirstname').hasClass('test[someval]'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="txtFirstname"></div>