Можно ли использовать .data () в качестве критерия поиска? - PullRequest
0 голосов
/ 18 июня 2010

У меня довольно сложное приложение чата, и в одном и том же окне происходит несколько панелей чата, записей чата, отправки чата и т. Д.Сначала я собирался сделать что-то вроде ....

<input type="text" class="chattext" id="chattext-42">
<input type="text" class="chattext" id="chattext-93">
<input type="button" class="chatsubmit" id="chatsubmit-42">
<input type="button" class="chatsubmit" id="chatsubmit-93">

... и т. Д. (Конечно, это значительно упрощается, они будут разделены на отдельные элементы, видимости и т. Д.)когда они нажимают на .chatsubmit, он получает идентификатор этого и находит последние два символа для идентификатора чата.Это создает некоторые проблемы, так как это потребовало бы переписывания, если идентификаторы изменили длину, и кажется мне просто не элегантным.

Затем я вспомнил функцию .data () в jQuery ... Я подумал, возможно, я мог бы сделатьэто больше похоже на это:

<input type="text" class="chattext"> ... and add a .data("id", 42) to this one
<input type="button" class="chatsubmit"> ... and add a .data("id", 42)

Так что, когда они нажимают chatsubmit, он получает идентификатор, а затем находит текст чата с этим идентификатором и обрабатывает его.Но, глядя на документацию, я не вижу простого способа поиска по этому.Например, предположим, что целью события в этом случае является отправка чата с данными ('id'), равными 42 ...

var ID = $(event.target).data('id'); // Sets it to 42
var chattext = ...

И здесь я сталкиваюсь с проблемой.Как мне найти, какой элемент DOM соответствует классу chattext и данным ('id') из 42?Есть ли какой-нибудь простой способ, или мне нужно искать в каждом .chattext тот, у которого есть идентификатор 42?Или есть другой простой способ сделать это?

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

Редактировать: Буквально через несколько секунд после публикации, я нашел это: http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/ которая включает в себя информацию о расширении селектора для данных.Так что я попробую это, и тем временем, это совершенно безрассудный способ справиться с этим?

1 Ответ

1 голос
/ 18 июня 2010

Я не вижу ничего плохого в использовании "id", и это определенно будет самый быстрый способ найти вещи. Если вы осторожны с используемым шаблоном (скажем, всегда ставите цифровую клавишу после символа «-» или «_»), вы можете просто использовать регулярное выражение для разделения значения ключа:

  var key = $(this).attr('className').replace(/-(\d+)$/, "$1");

или что-то еще.

Конечно, вы все равно можете использовать функцию «данные», чтобы также сохранить ключ, если извлечение его из значения «id» кажется уродливым. Однако это меня не беспокоит.

edit & mdash; если вы хотите «очистить его» еще больше, вы всегда можете написать пару плагинов jQuery, чтобы можно было получить ключ и вернуть селектор, который будет использоваться для поиска «партнерских» элементов данного.

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