Jquery добавляет класс для идентификатора специального символа

#javascript #jquery #special-characters

#javascript #jquery #специальные символы

Вопрос:

У меня есть идентификатор со специальными символами, такими как,

 var aaa = "someCompany=amp;#034;some's Dataamp;#034;";
aaa = aaa.replace(/amp;#034;/gi, """).replace(/amp;#039;/gi, "'").replace(/amp;amp;/gi, "amp;");
var abc = aaa.replace(/"/gi, "\"").replace(/:/gi, ":").replace(/'/gi,"\'");
var abcId = "li[id=""   abc   ""]";
$(abcId).addClass(" sel");
  

В IE не удается «addClass» для «abcId», но в Firefox работает нормально.

Не мог бы кто-нибудь, пожалуйста, сказать мне, как обрабатывать эти специальные символы…

Заранее спасибо

Комментарии:

1. Есть ли ошибка в IE?

2. Лучшим решением является упрощение идентификатора.

3. Ошибка в IE: объект не поддерживает это свойство или метод

4. Наличие специальных символов в id: s похоже на напрашивание на неприятности. Я бы рекомендовал вам удалить или заменить любые специальные символы.

5. если я удаляю все специальные символы, то при оповещении о $ (abcId).html() выдает null

Ответ №1:

Я не совсем уверен, что вы пытаетесь сделать, но вы могли бы подумать о том, чтобы сделать что-нибудь дешевое, например, URL, кодирующее идентификатор так, как он написан. Затем вы можете использовать $('#' escape(theID)) , чтобы получить его с помощью jQuery. После этого вы можете добавить свой класс с $('#' escape(theID)).addClass("sel")

Чтобы внести дополнительную ясность, вам следует записать свой HTML-код с URL-адресом ID, закодированным следующим образом: (Большинство серверных технологий могут сделать это с помощью простого вызова метода)

 <div id="someCompany="some's Data"">Content here.</div>
  

Тогда ваш javascript был бы таким:

 $('#'   escape("someCompany=amp;#034;some's Dataamp;#034;")).addClass("sel")
  

Комментарии:

1. Да, для этого есть несколько библиотек, таких как urldecoderonline.com/javascript-url-decode-jquery-plugin.htm

2. Также обратите внимание, что в исходном примере строка класса — «sel» с начальным пробелом.

3. @dgvid: Это ничего не даст. Это была ошибка или опечатка. Это просто добавит ссылку на класс «sel» с лишним пробелом.

Ответ №2:

Почему бы не попробовать:

 $(abc).addClass("sel");
  

Если у вас есть идентификатор li, почему вы используете селектор?

Комментарии:

1. Также попробуйте alert (abc), чтобы убедиться, что значение правильное и проблема не возникает где-либо еще.

2. ну, у моего тега li нет идентификатора, поэтому создаю его с помощью abcId

3. Да, должен быть только один элемент с именем с определенным идентификатором, поэтому, если html соответствует этому, это не должно быть проблемой.

4. Макс, если элемент li, который вы хотите выбрать, не имеет идентификатора, равного abc, то вы не сможете его выбрать.

5. @Theofanis, кое-что о вашем ответе $ (abc): я думаю, что наиболее подходящим было бы $ («#» abc), поскольку abc — это строка, а символ # указывает jQuery искать элемент с идентификатором abc. $ (abc) будет искать тег, названный по значению abc, как в <valueOfAbc /> вместо <li id=»valueOfAbc»></li>