【问题标题】:Assistance with JavaScript if statement协助 JavaScript if 语句
【发布时间】:2013-06-03 14:11:22
【问题描述】:

我遇到了如下问题:

我有一段 JavaScript 可以阻止难看的链接标题在我的网站上弹出。

window.onload = function() {
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        link.onmouseover = function() {
            this.setAttribute("org_title", this.title);
            this.title = "";
        };
        link.onmouseout = function() {
            this.title = this.getAttribute("org_title");
        };
    };
};

这非常适合我的需要。

但是,现在我想使用 Swipebox 插件,它使用“a title”字段作为标题。由于标题在鼠标悬停时被删除,它在我单击的图库中显示为没有标题(图库中的其他人仍然显示他们的标题)。

我想要做的是,对于我上面的 JavaScript,定位所有没有类“swipebox”的“a”元素。

任何帮助将不胜感激。

【问题讨论】:

  • var links = document.querySelectorAll("a:not(.swipebox)");
  • 最酷的,但 IE8 不支持。
  • @raina77ow querySelectorAll 得到了 IE8 的大量支持。较早的版本不支持它。除非你指的是:not() 选择器?
  • 不,支持 QSA。但是,:not 选择器不是。看看this,如果你不相信我,我仍然是一个自豪的 IE8 用户。 ))
  • @raina77ow 是的,刚刚查了一下。感谢您指出了这一点。我倾向于忽略对旧 IE 的 CSS 支持,因为 jQuery 规范化了很多

标签: javascript if-statement title caption


【解决方案1】:

如果包含在你的循环中,这样的东西应该可以工作:

if(link.className.indexOf('swipebox') === -1){
    // do your magic
}

这将检查 swipebox 是否存在于元素的类中,并且只有在它不存在时才会执行此魔法。

编辑

@raina77ow 的推荐!

if(!(/\bswipebox\b/.test(link.className))){
    // do your magic
}

RegEx 测试以确保类名中不存在任何形式的 swipebox。这应该很好地涵盖了您的所有基础。

【讨论】:

  • 你不只是喜欢某个人只是对页面上的每个人投反对票,然后没有说明原因吗?我喜欢一个很好的谜。
  • 我认为所有这些答案都不值得投反对票,所以我解决了这个问题;D
  • howderek 不错!正如 PlantTheldea 所说,这是一个谜,至少那个人应该说明他们成为混蛋的原因......
  • 如果有像“swipebox-title”这样的类,这将不起作用。此外,您不应使用.getAttribute() 来获取class...访问.className 属性
  • 实际上我会在这里使用/\bswipebox\b/.test(link.className)
【解决方案2】:

你可以这样做:

window.onload = function() {
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        if(link.getAttribute("class").indexOf("swipebox") == -1) {
            link.onmouseover = function() {
                this.setAttribute("org_title", this.title);
                this.title = "";
            };
            link.onmouseout = function() {
                this.title = this.getAttribute("org_title");
            };
        }
    };
};

编辑:正如 PlantTheIdea 所说,在这种情况下使用 getAttribute() 更有意义...

【讨论】:

  • 效果很好,非常感谢。我对在现有代码中放置 if 语句的位置感到困惑,这解决了它!
  • 这里为什么使用outerHTML(不是-好的,不是,但仍然-相当跨平台,公平)而不是className
  • @raina77ow 更不用说标签内的 anything 是否包含文本“swipebox”,意思是属性、属性值或内部文本,这将匹配。有一种更简单、更受支持、更一致的方式
  • @PlantTheIdea 确实,感谢您指出这一点,我更新了答案并为您的答案 +1 :)
【解决方案3】:

您可以使用以下排除代码:

if (link.className == null || link.className != "swipebox") {
    [...your two onmouseover/onmouseout functions...]
}

【讨论】:

  • 如果有多个类,这将不起作用,例如class="swipebox something-else"
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多