2

我有以下 javascript 代码:

$('#s2 a').click(function(){
    var cB = $(this);
    var f = parseInt(cB.attr('data-f'));
    var r = parseInt(cB.attr('data-r'));
    var c = parseInt(cB.attr('data-c'));
    if (pA == false && !isClickAllowed(f,r,c)) {
        return false;
    }
    // more stuff comes here 
}

这使得链接不可点击。这一切都有效。我还想删除悬停效果。用于此的 CSS 代码是:

.pc a:hover {
    background-color: #FFF;

我认为删除课程会这样做:cB.removeClass('pc');但这不起作用。

关于如何做到这一点的任何建议?

感谢您的时间

- 编辑 -

嗯,我想我明白为什么它不起作用了。在文档的顶部,我有这个:

$(document).ready(function() {
    setScale();
    $(window).resize(setScale);
    if (!('ontouchstart' in document)) {
        $('body').addClass('pc');
    } 
        more code here

.pc a:hover当在 PC 而不是触摸设备(例如 iPad)上打开页面时,这将为所有链接设置。我只需要在不可点击的链接上禁用此电脑悬停,如下所示:

if (pA == false && !isClickAllowed(f,r,c)) {
        return false;
    }

希望这可以帮助!

4

6 回答 6

6

cB 是您指示的 CSS 类未引用的锚点,父级将拥有该类pc以使其工作。cB.parent().removeClass('pc');会做的。

- 编辑 -

按照下面的博学评论,似乎cb.parents('.pc').removeClass('pc')cb.parents().removeClass('pc')(我没有进行基准测试以查看哪个更快)将是全面的解决方案。

詹姆斯、安东尼和塔德克的好球!

-- 编辑 2 --

在问题更新之后,我建议在您的链接中添加另一个类,即clickable,然后您的 CSS 变为:

.pc a.clickable:hover {
    background-color: #FFF;

你可以删除clickable那些你不想突出显示的链接上的类。更好的做法可能是简单地将禁用的链接替换为原始文本或作为具有标识类的跨度,即,disabled_link如果您希望以后可以选择启用它们。

于 2012-01-24T16:28:14.853 回答
3

虽然没有提供 HTML,但根据代码,cB它似乎不是具有类的元素,pc而是具有cB. 您需要从中删除该类。

如果直接父级是类的唯一祖先pc,您可以执行以下操作:

cB.parent().removeClass("pc")

如果除了直接父级之外只有一个祖先具有类,pc而父级没有,您可以执行以下操作:

cB.closest(".pc").removeClass("pc")

如果多个祖先具有pc该类,则可以使用以下内容:

cB.parents(".pc").removeClass("pc")

最后,如果其中a存在多个标签,.pc那么您不能使用删除类的方法,因为这将影响a.pc.

于 2012-01-24T16:30:44.450 回答
0
<p id="example">This is an example.</p> 

<script>
  document.getElementById('example').style.borderWidth = '4px';
</script>

请注意,borderWidth 与border-width 不同。这可以用于其他样式。根据经验,去掉破折号并将第二个单词的第一个字母大写。如果它不起作用,请谷歌它。

于 2012-01-24T16:28:44.620 回答
0

cB.removeClass('pc') 确实应该删除一个类。确保您的 css 在所有情况下都能正常运行。也尝试定位父母

于 2012-01-24T16:30:28.917 回答
0

我会在规则disabled之后的 CSS 中添加一个类,:hover并用禁用的样式覆盖它,这可能是也可能不是默认值。然后,你可以这样做:

cB.addClass('disabled');

您现有的解决方案不起作用的原因是,当它的父级具有该类时,您正在从元素中删除该类。

于 2012-01-24T16:31:11.417 回答
0

由于您的 CSS 问题已经解决,我想指出另一个改进:我看到您正在使用 cB.attr('data-f') 来存储一些数据,但 attr 应该只用于有效的 HTML 属性。您应该考虑使用仅为将非属性数据存储到元素中而创建的 jQuery 数据方法。
http://api.jquery.com/jQuery.data/

于 2012-01-24T16:35:04.420 回答