2011-04-11 2 views
0

В нескольких словах, мой вопрос заключается в том, какие ограничения для строки являются идентификатором поиска или содержимым, доступным для поиска, в jQuery.Ограничить строку jQuery id?


Обновление: Я получил удостоверение части, но не то, почему я не могу даже найти в содержании HTML с этой строкой. А Bouns для тех, кто готов сказать мне регулярное выражение, чтобы изменить шаблон из «ММ/ДД/ГГ ЧЧ: мм: сс» до «MMddyyHHmmss»


Подробности следуют:

Пытаюсь для получения текста внутри нескольких <p> с использованием jQuery.

Путь я добавляю их есть с помощью следующего кода:

$("<p>"+data.timeStamp + " _ " + data.text +"</p>") 
    .addClass(data.source) 
    .attr("id", "msg_"+data.userId+"_"+data.timeStamp) 
    .appendTo($("#messages_"+data.userId)); 

Они выглядят прекрасно, и я могу добавить столько, сколько я могу. Но тогда, Мне нужно получить текст внутри каждого, чтобы добавить ответ. Я использую userId и timeStamp, чтобы найти, к какому абзацу нужно добавить. Он работает так же хорошо, если timeStamp просто номер (например, созданный Java Servlet, как

SimpleDateFormat df = new SimpleDateFormat("MMddyyHHmmss"); 

но JQuery не смог найти его, если TIMESTAMP немного сложнее:

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm:ss"); 

или даже

SimpleDateFormat df = new SimpleDateFormat("MM-dd-yy HH.mm.ss"); 

Я попытался как

var txt = $("#msg_"+data.message.from+"_"+data.message.timeStamp).html(); 

и

var txt = $("#messages_"+data.userId).find(":contains('"+data.message.timeStamp+"')").html(); 

безрезультатно.

JSON закодирован и декодирован штраф во время вызова ajax, так как console.log (response.timeStamp); даст правильный выход.

Любые идеи? Должен ли я каким-то образом избежать строки timeStamp, чтобы использовать ее в поиске jQuery?

PS 1: Если вы нашли ошибку синтаксиса, то, скорее всего, из-за разреза & пасты и упрощения кода для примера, так как с помощью простого TIMESTAMP я могу заставить его работать в реальном JS файл ,

PS 2: Я знаю, что обходной путь в моем конкретном случае будет использовать две разные строки, один для временной метки в тексте и один (простой) для идентификатора, но это не помогает мне понять, ограничение здесь.

+1

Я думаю, что идентификаторы не могут содержать пробелы. –

+0

@Felix получил это, но я даже не могу найти этот поиск строк в контенте – Aleadam

ответ

6

Для идентификаторов элементов необходимо иметь действительное значение.Из HTML 4 спецификации:

ID и NAME маркеры должны начинаться с буквы ([A-Za-Z]) и может следовать любое количество букв, цифр ([0-9]), дефисов («-»), подчеркивания («_»), двоеточия («:») и периоды («.»).

Но вы Propably есть проблемы с JQuery CSS селекторы при использовании двоеточия и периоды в ваших идентификаторов, так как они разбираются JQuery как имена классов и псевдо-элементов.

Таким образом, ваши идентификаторы элементов должны содержать только буквы, цифры, дефисы и символы подчеркивания.

+2

Вы можете использовать двойную обратную косую черту (\\\), чтобы избежать двоеточий и периоды – Alex

+0

Я должен был прочитать спецификацию ID: /. Но я все еще ищу для поиска контента, так или иначе работает для меня. Итак, вы знаете, как мне избежать этих персонажей? – Aleadam

+0

@Alex спасибо. Я попробую. – Aleadam

0

Основываясь на комментариях и ответе, я попытался сбежать с двойной обратной косой чертой, но это не сработало (все равно никаких результатов) даже при поиске текста и не использовании этих длинных идентификаторов. Таким образом, я заканчивал удаление пробелов и символов со стороны ид, выполнив на клиенте:

var ts = data.timeStamp.replace(/[\:\/ ]/g, ""); 

и на сервере:

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm:ss"); 

Затем я добавил отформатированную дату в текст и раздел до идентификатора. Он работает, хотя мне все еще интересно, какие ограничения для строк поиска jQuery.

Смежные вопросы