jqueryを使用したフォントサイズの変更について質問です。
サイズの変更は以下のスクリプトで動作するのですがクラス名(active)が付与されずうまく動作しません。
html
<ul class="switch">
<li><span class="fontChangeSmall">小</span></li>
<li><span class="fontChangeNormal">中</span></li>
<li><span class="fontChangeLarge">大</span></li>
</ul>
font-change.js
$(document).ready(function() {
var bodyClass = 'font';
var switchClass = 'fontChange';
var startClass = 'Normal';
var activeClass = 'active';
var value = $.cookie('fontSize');
if ( value ) {
$('body').addClass(bodyClass + value);
$('.switch .' + switchClass + value).addClass(activeClass);
} else {
$('body').addClass(bodyClass + startClass);
$('.switch .' + switchClass + startClass).addClass(activeClass);
}
$('.switch span').click( function() {
value = $(this).attr('class').replace(switchClass, '');
$('body').removeClass(bodyClass + 'Normal').removeClass(bodyClass + 'Small').removeClass(bodyClass + 'Large');
$('body').addClass(bodyClass + value);
$('.switch span').removeClass(activeClass);
$('.switch .' + switchClass + value).addClass(activeClass);
$.cookie('fontSize', value);
});
});
上記だけであれば動作するのですが下記のスクリプトがあるとactiveが付与されない状況です。
下記をコメントすると正常に動作します。
※どちらのjsも外部ファイルとして読込みしてます。
common.js
$(function() {
$('body :first-child').addClass('firstChild');
$('body :last-child').addClass('lastChild');
});
どのようにすればactiveが付与されるようになりますでしょうか?
No.1
- 回答日時:
jqueryはよく知りませんが、
擬似クラスの指定は :first、:lastで「-child」は付いてないと思うけれど、それも通じるのかな?
文字のサイズ設定はbody要素に対して行っているので、個別の要素にサイズ指定を行っていればそちらの方が優先されるはず。
body:first、body:lastでクラスを付与しているので、そのクラスで文字サイズを固定していれば、クリックしてもその要素は対象外になる。
全体に適用させたければ、個別要素にサイズ指定をするのをやめればよいのでは?
ちょっと試した範囲では、:first、:lastなどはHTMLの改行でTextがあったりすると、要素をとらなかったりするみたいなので、HTMLの記述にもちょっと注意してみた方が良いかも。(何をとっているかまでは未確認)
この回答への補足
お返事ありがとうございます。
私の知識不足でわからないのですが具体的にどうすればいいのでしょうか?
ちなみに上記の状態でフォントサイズの変更はできています。
うまくいかないという箇所はa要素にクラス(active)属性が付与されないだけという事です。
No.2
- 回答日時:
font-change.jsだけなら動くと思います。
common.jsの方で、擬似クラスなのにselectorがないのが致命的で、
これが原因でまともな動作をしないと思います。
ちなみにfirst-childは「初めの子要素」と勘違いしがちですが、
selectorで選択された中で初めの要素です。
bodyの子要素で最初のものを取り出すなら、
$('body>*:first-child')
としてみてください。
この回答への補足
追記です。
$('ul>li:first-child').addClass('firstChild');
$('ul>li:last-child').addClass('lastChild');
としたところ動作するようになりました。このほかにもdlやdiv等擬似クラスを付与する場合には
ひたすら同様に記述するしか方法はないですか?
まとめて記述する方法がありましたら教えてください。
お返事ありがとうございます。
>ちなみにfirst-childは「初めの子要素」と勘違いしがちですが・・・
まさにその通りだったのですが基本的にはbodyの子要素ではなくcssの設定が主な利用目的で
ulやdl等コーディング部分に深く関わります。例えば以下のような感じです
li.firstChild{ margin-bottom: 1em; }
li.lastChild { margin-bottom: 0; }
$('body>*:first-child')に変えたところ$('body :last-child')をコメントすると正常に
動作するのですが最初のdivにしかfirstChildが付与されず当初の使用目的に反します。
上記のような使用目的の場合にはどのように書くのが正しいのでしょうか?
No.3ベストアンサー
- 回答日時:
>まとめて記述する方法がありましたら教えてください。
カンマで区切ればいいと思います。
$('ul>li:first-child,dd>dl:first-child').addClass('firstChild');
他には、classNameを付けないでCSSだけで書いてみるとか
ul>li:firstChild{ margin-bottom: 1em; }
IE6・7用のハックで、
ul li.first-child {
color:#f0f;
}
ul li {
_behavior: expression(
this.className += this.previousSibling ? ' first-child' : '',
this.style.behavior = 'none'
);
}
↑liの下に別のulがあると、動作がおかしくなります。
ただ、ソースを見る限り、要素を動的に変更しているわけでもなさそうなので、
class="firstChild"とclass="lastChild"をHTMLに記述するのが良さそうな気もします。
No.4
- 回答日時:
前の回答に間違いがありました。
ul li.first-child {
color:#f0f;
}
ではなくて、
ul li.first-child { margin-bottom: 1em; }
です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
どの<li><a> が押されたか判別...
-
質問に答えていくと、回答によ...
-
【javascript で動的に a タグ...
-
クリックした<a>タグのみにClas...
-
DOM の 要素の数え方について
-
javascriptでEnterキーをtabキ...
-
固定ナビのJqueryのアコーディ...
-
<ul>から</ul>の間をjavascriptで
-
jQuery タブメニューへのダイ...
-
戻ってきた時ツリーメニューが...
-
C# ブラウザの自動クリック
-
jQueryで、リンクURLの一致を確...
-
【jQuery】遅延実行(タイムラ...
-
JQueryタブのアクティブ アン...
-
チェックボックスに入っている...
-
オンマウスで画像ロールオーバ...
-
文字と数字が混在する要素のsor...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
javascriptでEnterキーをtabキ...
-
クリックした<a>タグのみにClas...
-
チェックボックスに入っている...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
jQueryのeqで最後からn番目以降...
-
ネストされたチェックボックス...
-
javascriptで、クリックしたら...
-
onmouseoverの表示切り替えが上...
-
文字と数字が混在する要素のsor...
-
jQueryでネスト構造の<li>がク...
-
タブメニューを上下に設置
-
<li></li>の数を制限
-
jQuery多層式アコーディオンメ...
-
どの<li><a> が押されたか判別...
-
CSSとJavaScriptを使ってドロッ...
-
複数の画像をランダム(シャッ...
おすすめ情報