使用动态Id查找元素

时间:2012-03-30 05:14:48

标签: jquery jquery-selectors primefaces

我想在jquery中创建一个泛型函数来选择所有功能。我的网页上有一个标签视图。

我的组件的ID是:tabId:someDynamicId:rowId:componentId 其中,someDynamicId是动态生成的。

所以在jquery中我想找到id以 - TabId开头的元素:someDynamicId&以componentId结束。并且,tabId,someDynamicId& componentId将作为参数传递给需要查找此元素的泛型函数。

3 个答案:

答案 0 :(得分:9)

很简单:

$('[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​
})

Wildcards in jQuery selectors

但我建议使用正确的工具来完成这项工作。 ID对于查找特定元素很有用,但在您的情况下,最好使用一个或两个类和数据属性。例如:

<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​
    })  
}

答案 1 :(得分:2)

您可以使用正则表达式和filter()执行此操作。这样的事情应该有效。此特定示例查找以“one”开头,后跟数字并以“two”结尾的id。检查示例http://jsfiddle.net/5eXm4/

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

编辑:您可以在regex中使用变量,只需将它们声明为:

var re = new RegExp(myVar);

答案 2 :(得分:1)

 function( tableid, dynamicid, componentid)
   {
     a  = tableid+dynamicid ;    
     $( " [id^="+a+"][id$="+componentid+"] "). each(function()
     {
                  // do ur stuff
     }
    );
  }