こんにちは、さるまりんです。
前回、CSSのdisplay: none
が効かない時にどうするかについて書きました。
JavaScriptでCSSのstyle
を操作した時も同じようなことがあります。
display
にnone
を設定しようと
document.getElementById('elem-a').style.display = 'none';
こう↑してみました。
こうしたらid
がelem-a
の要素は消えてくれるかと思ったらダメでした。。
document.getElementById('elem-a').style.display = 'none !important';
これ↑もダメででした。
どうしましょう。
cssTextプロパティ
display
ではなくcssText
というプロパティを設定することで実現できました。
document.getElementById('elem-a').style.cssText = 'display:none !important';
気をつけないといけないのはすでにcssText
が設定されているかもしれないのでそれを上書きしてしまわないように
cssText = document.getElementById('elem-a').style.cssText;
cssText += ';display:none !important;';
document.getElementById('elem-a').style.cssText = cssText;
みたいにした方がいいかもです。
setPropertyメソッド
もう一つの方法です。setProperty()
メソッドを使うこともできます。
setProperty()
メソッドでは3番目の引数で優先度を設定することができます。
document.getElementById('elem-a').style.setProperty("display", "none", "important");
これで同じように優先度をimportant
にしてelem-a
の要素を非表示にすることができます。
jQueryで
jQueryではどうでしょうか。
jQueryでは
$('#elem-a').hide();
としても消えないことがあります。
理由は同じで優先順位で効かないことがあるのです。
その場合はcssText
を変更します。
$('#elem-a').css('cssText', 'display: none !important');
ちなみにdisplay
を操作しようとしても動作しないです。なのでこれ↓はダメ。
$('#elem-a').css('display', 'none !important');
JavaScriptの時と同じですね。
上書きを注意しなければなのも同じです。
cssText = $('#elem-a').css('cssText');
cssText += ';display:none !important;';
$('#elem-a').css('cssText', cssText);
表示するblock
やshow()
が効かない時も同じようにできます。
仕組みがわかると納得です。
読んでくださってありがとうございました。
それではまた!