-1

当我比较时,我想使用通配符。假设目标 id 是"foolinkbar"

这样我正在比较,但没有运气。这是代码

$("html").click(
              function (e) {
                  if (e.target.is("[id*=link]")  && e.target.id != "HoverSubmenu"
                        && e.target.className != "HoverRoot"
                        && e.target.className != "HoverLI" 
                        && e.target.className != "atag") {
                      $('div#HoverSubmenu').fadeOut();
                  }
              });

怎么写e.target.id== "[id*=link]"。请帮我整理一下。谢谢

4

2 回答 2

1

这是 JavaScript 和 jQuery 语法的奇怪组合,并且也是无效的,因为.is()无法在 HTML 目标上调用该方法。它需要在 jQuery 对象上调用。

CSS 属性选择器[id*=link]是完全有效的。

执行此操作的 jQuery 方法是:

$('html').on('click', '[id*=link]', function() {
    if (this.id != 'HoverSubmenu'
        && this.className != 'HoverRoot'
        && this.className != 'HoverLI' 
        && this.className != 'atag') {
        $('div#HoverSubmenu').fadeOut();
    }
});

给定示例 HTML

<a id="foolinkbar">foolinkbar</a>

<div id="HoverSubmenu">I will fade out when you click foolinkbar but not when other parts of the page are clicked</div>

看演示

于 2013-03-26T08:50:34.420 回答
0

目标不是 jQuery 对象,因此您不能is在其上调用函数。用 包裹元素$()

简单的例子

$(document).click(function(e){
    if($(e.target).is("[name*='link']")){
        alert("Found");
    }
});

小提琴:http: //jsfiddle.net/4vCuq/

您的代码已修改

$(document).click(function (e) {
    if ($(e.target).is("[id*=link]")  && e.target.id != "HoverSubmenu"
        && e.target.className != "HoverRoot"
        && e.target.className != "HoverLI" 
        && e.target.className != "atag") {
            $('div#HoverSubmenu').fadeOut();
     }
});
于 2013-03-26T08:54:55.390 回答