Поиск элементов с динамическим идентификатором - PullRequest
8 голосов
/ 30 марта 2012

Я хочу сделать универсальную функцию в jquery для выбора всех функций. У меня есть вид с вкладками на моей веб-странице.

Идентификатор моего компонента: tabId: someDynamicId: rowId: componentId где someDynamicId генерируется динамически.

Итак, в jquery я хочу найти элемент, идентификатор которого начинается с - tabId: someDynamicId и заканчивается componentId. И tabId, someDynamicId & componentId будет передан в качестве аргумента универсальной функции, где этот элемент должен быть найден.

Ответы [ 3 ]

9 голосов
/ 30 марта 2012

Все просто:

$('[id^=tabId][id$=componentId]').each(function(){
    var id = $(this).attr('id'); // tabId:someDynamicId:rowId:componentId​
    var list = id.split(':');​​

    console.log(list[0]); // tabId
    console.log(list[1]); // someDynamicId
    console.log(list[2]); // rowId
    console.log(list[3]); // componentId​
})

Подстановочные знаки в селекторах jQuery

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

<div class="tabs" data-component-id="x" data-tab-id="y">

Затем найдите все элементы $ ('. Tabs') и используйте $ (this) .data ('component-id') и $ (this) .data ('tab-id')

$('.tabs').each(function(){
    var component_id = $(this).data('component-id');
    var tab_id = $(this).data('tab-id');
});

Обновление:

Есть пример использования этого как функции:

function(tabId,componentId) {
    $('[id^='+tabId+'][id$='+componentId+']').each(function(){
        var id = $(this).attr('id'); // tabId:someDynamicId:rowId:componentId​
        var list = id.split(':');​​

        console.log(list[0]); // tabId
        console.log(list[1]); // someDynamicId
        console.log(list[2]); // rowId
        console.log(list[3]); // componentId​
    })  
}
2 голосов
/ 30 марта 2012

Вы можете сделать это с помощью регулярных выражений и filter(). Нечто подобное должно работать. В этом конкретном примере выполняется поиск идентификатора, начинающегося с «один», за которым следует число и заканчивающегося «два». Проверьте пример http://jsfiddle.net/5eXm4/.

$.fn.regexFindId = function(re){
    return this.filter(function(){
        var id = this.id;
        return id.match(re);
    });
};

РЕДАКТИРОВАТЬ: Вы можете использовать переменные в регулярном выражении просто объявить их так:

var re = new RegExp(myVar);
1 голос
/ 30 марта 2012
 function( tableid, dynamicid, componentid)
   {
     a  = tableid+dynamicid ;    
     $( " [id^="+a+"][id$="+componentid+"] "). each(function()
     {
                  // do ur stuff
     }
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...