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、タッチ デバイス (iPad など) ではなく PC でページを開いたときに、すべてのリンクに が設定されます。次のようにリンクをクリックできない場合にのみ、このPCホバーを無効にする必要があります。

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')or 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")

直接の親以外の 1 つの祖先のみが のクラスを持ち、親が持ってpcいない場合は、次の操作を実行できます。

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

複数の祖先がpcクラスを持っている場合は、次を使用できます。

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

最後に、複数のaタグが存在する場合.pc、クラスを削除するアプローチは使用できません。これは、aその 内のすべてのタグに影響します.pc

于 2012-01-24T16:30:44.450 に答える
0

CSS の問題は既に解決されているので、別の改善点を指摘したいと思います。cB.attr('data-f') を使用してデータを保存しているようですが、attr は有効な HTML 属性にのみ使用する必要があります。非属性データを要素に格納するためだけに作成された jQuery データ メソッドの使用を検討する必要があります。
http://api.jquery.com/jQuery.data/

于 2012-01-24T16:35:04.420 に答える
0

cB.removeClass('pc') は実際に aclass を削除する必要があります。CSS がすべてのシナリオで正しく動作することを確認してください。また、親をターゲットにしてみてください

于 2012-01-24T16:30:28.917 に答える
0

disabledルールの後に続く CSS にクラスを追加し、:hoverそれを無効なスタイルで上書きします。これはデフォルトである場合とそうでない場合があります。次に、次のことができます。

cB.addClass('disabled');

既存のソリューションが機能しない理由は、親にクラスがあるときに要素からクラスを削除しているためです。

于 2012-01-24T16:31:11.417 に答える
0
<p id="example">This is an example.</p> 

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

borderWidth は border-width とは異なることに注意してください。これは他のスタイルにも使用できます。経験則として、ダッシュを取り除き、2 番目の単語の最初の文字を大文字にします。うまくいかない場合は、Google で検索してください。

于 2012-01-24T16:28:44.620 に答える