Как избежать ":"?

например, у меня 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,"\\:") и добавляет #, поэтому вы также можете использовать это.