Как избежать ":"?
например, у меня id id
someform: somepanel: somebutton
Когда я делаю jQuery ( "# someform: somepanel: somebutton" ), он возвращает someform, как АВТОМАТИЧЕСКИ удаляет этот id?
EDIT:
Я хочу сделать что-то вроде этого
jQuery(somefunction("#someform:somepanel:somebutton"))
Ответы
Ответ 1
Если это только эта очень специализированная версия, вы можете просто .replace()
символ.
function somefunction(selector) {
return selector.replace(/:/, '\\\\:');
}
jQuery(somefunction("#someform:somepanel:somebutton"))
затем преобразуется в
jQuery("#someform\\:somepanel\\:somebutton");
Чтобы иметь более общую версию, вы можете использовать regexp:
function somefunction(selector) {
return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) {
return "\\\\" + $2;
});
}
Ответ 2
используйте двойные обратные косые черты:
jQuery("#someform\\:somepanel\\:somebutton")
по теме:
Обновление # 1
После вашего комментария в отношении автоматического экранирования лучший метод, который я вижу, заключается в создании функции внутри строкового объекта, например:
String.prototype.escape = function()
{
return this.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1')
}
вы также можете точно определить функцию для двоеточий:
String.prototype.escape_colon = function()
{
return this.replace(/:/,'\\$1')
}
и используйте так:
jQuery("someform:somepanel:somebutton".escape())
но это вызовет проблемы с псевдоселекторами, такими как:
jQuery("someform:somepanel:somebutton:first".escape())
Селектор :first
будет экранирован, и поэтому вы не найдете свой элемент.
но наша лучшая ставка будет заключаться в создании синтаксического анализатора в прототипе для замены того, где он находит определенный набор символов, например:
jQuery("someform(_e(:))somepanel(_e(:))somebutton:first".escape())
таким образом вы можете определить, что вы хотите избежать, но если это так, вы можете также избежать их сами.
Ответ 3
Try:
jQuery("#someform\\:somepanel\\:somebutton")
Ответ 4
Используйте этот трюк: jQuery($('myid'))
Причина: я использую "prototype" для поиска элемента по id, а затем передаю результат в jQuery.
Плюсы: легче читать.
Минусы: нужен Prototype и jQuery, но RichFaces все равно использует Prototype.
Ответ 5
Я создал функцию для вызова двоеточий для JSF в jQuery:
//USAGE: $(espaceIdForJSF('#someId:anotherId'));
function escapeIdForJSF(id) {
return id.replace(/:/g,"\\:").replace(/\./g,"\\.");
}
Ответ 6
Если вы используете PrimeFaces, у них есть удобная вспомогательная функция, чтобы сделать именно это:
escapeClientId (id) - Инициированные JSF-идентификаторы с полуплодом для работы с JQuery.
Чтобы вызвать его:
PrimeFaces.escapeClientId("someform:somepanel:somebutton")
который возвращает:
#someform\\:somepanel\\:somebutton
Внутри он просто вызывает replace(/:/g,"\\:")
и добавляет #
, поэтому вы также можете использовать это.