Ограничить строки идентификатора JQuery? - PullRequest
2 голосов
/ 11 апреля 2011

В двух словах мой вопрос: какие ограничения для строки, чтобы быть идентификатором для поиска или контентом для поиска в jQuery.


Обновление:Я получил часть идентификатора, но не потому, что я не могу даже искать в html-содержимом с этой строкой.Прыжки для тех, кто хочет сказать мне регулярное выражение, чтобы изменить шаблон с «ММ / дд / гг чч: мм: сс» на «ММддей ЧЧммсс»


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

Я пытаюсь получить текст внутри нескольких <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 как

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: Если вы обнаружите какую-либо синтаксическую ошибку, это, скорее всего, связано с вырезанием и вставкой и упрощением кода для примера, поскольку с помощью простой метки времени я могу заставить ее работать в реальномJS файл.

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

Ответы [ 2 ]

8 голосов
/ 11 апреля 2011

У вас должно быть правильное значение для ваших идентификаторов элементов.Из спецификации html 4:

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

Но у вас, вероятно, будут проблемы с селекторами jQuery cssпри использовании двоеточий и точек в ваших идентификаторах, поскольку они анализируются jQuery как имена классов и псевдоэлементы.

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

0 голосов
/ 18 апреля 2011

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

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

и на сервере:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...