如何将这些jquery函数干燥成一个通用函数?

如何将这些jquery函数干燥成一个通用函数?,jquery,jquery-selectors,Jquery,Jquery Selectors,我有一个jquery应用程序,在不同的选项卡中有几个网格(jqgrid)。 在ech网格下方,我有一个按钮: <div id="content1" class="content"> <table id="grid1" class="myGridClass"></table> <input id="ColChooser1"type = "button" value="Choose Columns" class="grid1"><

我有一个jquery应用程序,在不同的选项卡中有几个网格(jqgrid)。 在ech网格下方,我有一个按钮:

<div id="content1" class="content">
    <table id="grid1" class="myGridClass"></table>
    <input id="ColChooser1"type = "button" value="Choose Columns" class="grid1"></input>
</div>

<div id="content2" class = "content">    
    <table id="grid2" class="myGridClass"></table>
    <input id="ColChooser2"type = "button" value = "Choose Columns" class="grid2"></input>
</div>
为所有按钮编写一个函数的最佳方法是什么

到目前为止,这就是我得到的

$('div.content :input[value="Choose Columns"]').click(function{
   $('div.content table.'+this.attr('class')).jqGrid('columnChooser');
});
不确定该.attr('class')是否始终相同,尽管每个按钮都有与其表元素相同的类,因为jquery ui可能会添加其他类--

已编辑 下面是有效的答案-接近下面的第一个答案,但有点扭曲-

            $('div.DataContent :input[value="Choose Columns"]').click(function() {
                $(this).parent().find('.myGridClass').jqGrid('columnChooser');
            });
使用.find而不是.children来遍历比第一级更深的元素(jqgrid将原始表元素嵌套得更深) 还使用了一个更具体的选择器“.myGridClass”而不是“table”,因为jqGrid添加了几个其他的表元素,利用了“table”并没有返回原始的表元素。请查看jQuery文档中的页面。您应该能够使用这些函数的组合(例如父函数、父函数、子函数)来选择所需的元素

e、 g:


您可以从按钮单击事件开始

$(':input[id^=ColChooser]').click(function(){
var $this = $(this); // button
// Get the table
var $tbl = $this.prev('table');
// Now you have your table, and button apply the grid
});

将click处理程序附加到父级,用于输入,然后查找同级表

$(parent_container_of_divs).on('click', '.content > input',function(){
    $(this).sibling('table').jqGrid('columnChooser');
});
如果这些元素比您提供的元素多,那么让我们更具体一些。将单击处理程序添加到
ColChooser
输入的父级,并找到它的同级
grid

$(parent_container_of_divs).on('click', 'input[id^="ColChooser"]',function(){
    $(this).sibling('table[id^="grid"]').jqGrid('columnChooser');
});

已使用.find而不是.children在提交的要遍历比第一级更深的答案之一(jqgrid将原始表元素嵌套得更深)中也使用了更具体的选择器“.myGridClass”而不是“table”,因为jqgrid添加了几个其他表元素,使用“table”不返回原来的表元素,这看起来像是shd的工作,但是jgGrid插件添加了一堆新元素,将原来的表元素嵌套在一起。prev仅返回前一个同级是否插入原始表和按钮之间?否则,应使用$(this.prev('table.myGridClass')
$(parent_container_of_divs).on('click', '.content > input',function(){
    $(this).sibling('table').jqGrid('columnChooser');
});
$(parent_container_of_divs).on('click', 'input[id^="ColChooser"]',function(){
    $(this).sibling('table[id^="grid"]').jqGrid('columnChooser');
});
        $('div.DataContent :input[value="Choose Columns"]').click(function() {
            $(this).parent().find('.myGridClass').jqGrid('columnChooser');
        });