jQuery过滤器匹配

时间:2011-10-18 13:45:47

标签: jquery regex filtering

我有一个正在寻找实时点击事件的脚本,但我希望点击不适用于某些<a>代码

到目前为止,这是我的代码:

$('a:not(.btn-control)').filter(function(index) {
  return $(this).attr('href').match(/#|void/);
}).live("click", function() {
  var url;
  url = $(this).attr('href');
  url = url.replace(/^.*#/, '');
  $.history.load(url);
  return false;
});

问题
我有一个静态播放器的网站,点击链接后我使用HTML5历史记录功能加载新内容,以便页面永远不会刷新...以避免必须遍及整个网站并添加类应该包含此功能的所有链接onClick,我只想过滤掉#

javascript:void(0)href的那些链接

问题
如何过滤掉href包含javascript:void(0)#的链接?

工作代码

$('a:not(.btn-control)').live("click", function() {
  var self, url;
  self = $(this);
  url = self.attr('href');
  if (url.match(/#|void/) === null) {
    url = url.replace(/^.*#/, '');
    $.history.load(url);
    return false;
  }
});

1 个答案:

答案 0 :(得分:2)

jQuery docs表示:

  

不支持DOM遍历方法来查找要发送到.live()的元素。相反,应始终在选择器之后直接调用.live()方法,如上例所示。

相反,您应该处理所有a标记,但如果您不需要处理它,请退出。

$('a:not(.btn-control)').live("click", function() {
  var self = $(this);

  if (!self.attr('href').match(/#|void/)) {
    return;
  };

  // else continue and do stuff

  var url = self.attr('href');
  url = url.replace(/^.*#/, '');
  $.history.load(url);

  return false;
});