jQuery将click事件绑定到每个页面刷新时增加数量的id

时间:2012-10-15 22:09:15

标签: javascript jquery sharepoint

这就是我所拥有的。列表Web部件中的SharePoint 2010自定义视图。我有6个类别和4个子类别。项目不必具有子类别,但必须具有类别。

该视图显示一个空白子类别,旁边有数字。我正在尝试将click事件绑定到所有这些事件,但每次刷新页面时ID都会增加。基本ID为titl [0-9] * [0-9] 。然后还有我要检查的另一个ID,它是titl [0-9] * _ [0-9] 1

所以我尝试使用regex selector for jQuery并且它没有正确绑定。它找到了对象但没有正确绑定。

我需要它绑定到id然后能够触发下一个tone的onclick事件,即1_。然后检查它的文本是否为“”,如果是,则隐藏tbody。

我的代码:

$(":regex(id,titl[0-9]*-[0-9]_) td a").bind('click', function(){
  var parent = $(this);
  var child = $(this).next("tbody");
  var grandchild = $(this).next("tbody td a");
  //alert(parent + " | " + child + " | " + grandchild ); //always return undefined??
  // Everything below works if I can get the IDs correct for child and grandchild
  if($(grandchild).css('display')!='none'){
    $(grandchild).click();

    if($(grandchild).text()==" "){
      $(child).hide();
    };
  };
}); 

3 个答案:

答案 0 :(得分:1)

我强烈建议你需要重新考虑你的身份证 - 他们应该保持一致,真的。

如果你绝对必须使用变量ID,你可以在选择器中使用“id”属性和任何其他属性:

// Any element, ID starts with "titl"
$('[id^="titl"]')

为了捕捉并重复使用它,我真的建议您对自己的ID做错了。然而,为了完整性(虽然我不能强调你应该尽量避免使用它),基于此的东西应该是一个好的(哈哈,是的正确的)起点

// Long-winded messy hideous foul code
var $title = $('[id^="titl"]'),
    title = $title.length && $title.eq(0).attr('id');
if (title !== 0)
{
    $('#' + title + ' #' + title + '1 td a').html('Ow.');
}

答案 1 :(得分:0)

我不确定我是否会这样做,但你可以定位以titl开头的任何ID,然后在函数内部以其他许多方式过滤ID:

$('[id^="titl["]').on('click', function() {
    var check = this.id.charAt(10) == '_', //tenth character is underscore ?
        parent = $(this),
        child = $(this).next("tbody"),
        grandchild = $(this).next("tbody td a");

    if (check) {
        //element matching second selectortype clicked
    }else{
        if (grandchild.is(':visible')){
            grandchild.trigger('click');
            if (grandchild.text()==" ") child.hide();
        }
    }
});

答案 2 :(得分:0)

如果你能控制你的ID,我同意重新考虑你的ID。即使你不这样做,StartsWith选择器也会为你提供所有更高级别的元素,你可以遍历到更低级别的元素。请记住,链接选择器意味着您可以匹配ID中类似的模式,而不关注实际的

另一个注意事项:我从来不需要使用jQuery进行正则表达式匹配。类似CSS3的选择器对于它来说太强大了。