Получить элемент по идентификатору через регулярное выражение jQuery - PullRequest
0 голосов
/ 08 октября 2009

HTML-элемент содержит сложный и уникальный идентификатор, состоящий из пространства имен в качестве префикса и увеличенного индекса - в качестве постфикса.

Я пытаюсь сделать это с подстановочным выражением для идентификатора.

Если использовать простой способ без пространства имен, то он прекрасно работает:

$j("[id*=service_selected_]").click(function(){
...

Чтобы сохранить уникальность, мне нужно предоставить часть пространства имен в id, но это не разрешается следующим образом:

var selId = "'" + '[id*=' + namespace + '_service_selected_]' + "'";

$j(selId).click(function(){
...

Под частью .jsp:

        <c:forEach var="package" items="${packages.page}" varStatus="status">
            <tr>
                <td>
                    ${package.name}
                </td>
                <td id="<portlet:namespace/>_service_price_${status.index}">${package.price}</td>
                <td >
<input type="checkbox" name="service_id" value="${package.id}" id="<portlet:namespace/>_service_selected_${status.index}">
                </td>
            </tr>
        </c:forEach>

Ответы [ 4 ]

4 голосов
/ 09 октября 2009

Ну, так как мы все предлагаем разные версии одного и того же кода, вот мой:

var namespace = 'test';
var id = '_service_selected_';
$(["[id^=", namespace, "_", id, "_]"].join(''));

Я также провел несколько тестов скорости на все предложения, опубликованные до сих пор. У меня самый быстрый на Firefox и Chrome и второй лучший на IE8. Джош Стодола вообще не работает.

Вот набор тестов: http://jsbin.com/igate (редактируется через http://jsbin.com/igate/edit)

Вот результаты:

Firefox

select_Phil 37 ms 36 selected
select_Ghommey 120 ms 36 selected
select_Josh_Stodola 1077 ms 0 selected
select_brianpeiris 31 ms 36 selected

Chrome

select_Phil 17 ms 36 selected
select_Ghommey 108 ms 36 selected
select_Josh_Stodola 290 ms 0 selected
select_brianpeiris 15 ms 36 selected

IE8

select_Phil 69 ms 36 selected
select_Ghommey 300 ms 36 selected
select_Josh_Stodola 1632 ms 0 selected
select_brianpeiris 73 ms 36 selected
2 голосов
/ 08 октября 2009

Я бы использовал селектор StartWith, чтобы получить пространство имен элементов, а затем запросить it , чтобы получить совпадения ...

var namespace = "test";
var itemspace = "_service_selected_";

var ns = $("[id^=" + namespace + "]");
var nsItems = $("[id*=" + itemspace + "]", ns);
2 голосов
/ 08 октября 2009

Как насчет

var selId = "[id*=" + namespace + "_service_selected_]";
$j(selId).click(function(){
...

Я думаю, вы перепутали со слишком многими кавычками!

1 голос
/ 08 октября 2009

Вы можете искать дважды

$j("[id*=" + namespace + "]").filter("[id*=service_selected_]").click(function(){
...