jQueryでのclassの操作

このQ&Aのポイント
  • WordPressの文字サイズ変更用のjQuery設置方法とクラス操作方法について説明します。
  • WordPressのbodyのclassを削除せずに、文字サイズ変更用のクラスだけを追加する方法を教えてください。
  • jQueryを使用して、文字サイズ変更スイッチを押したときにクラスが追加され続ける問題を解決します。
回答を見る
  • ベストアンサー

jQueryでのclassの操作

現在Wordpressに、文字のサイズを「小・中・大」と変えるjQueryを設置しています。 http://az-store.nrym.org/download/extend/jquery-fontsize-switcher/ Wordressではもともとbodyのclassに指定があるのですが、このjQueryを設置すると removeAttr("class")で削除されてしまいます。 そこで、もともとのClassを活かしたまま文字サイズ変更用のクラスだけを 削除&追加ができればいいのですが、 どうすればよいでしょうか? ただ、単純に「removeAttr("class")」の記述を削除してしまうと、 文字サイズ変更スイッチを押す度に、クラスが追加され続けるのでそれは避けたいです。 $(function(){ var currentstyle = readCookie('fontStyle'); if (currentstyle){ switchFont(currentstyle); }; $("li.sizeL").click(function(){ switchFont("fontL"); return false; }); $("li.sizeM").click(function(){ switchFont("fontM"); return false; }); $("li.sizeS").click(function(){ switchFont("fontS"); return false; }); }); function switchFont(className){ $("body").removeAttr("class").addClass(className); createCookie('fontStyle', className, 365); }; // cookie script http://www.quirksmode.org/js/cookies.html function createCookie(name,value,days){ if (days){ var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name){ var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }

  • AJAX
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • think49
  • ベストアンサー率59% (285/482)
回答No.1

$("body").removeClass("fontL fontM fontS").addClass(className); で動作しました。 .removeClass() – jQuery API http://api.jquery.com/removeClass/ ただ、http://az-store.nrym.org/download/extend/jquery-fontsize-switcher/jquery-fontsize-switcher/switch.js にはライセンスの記載がなく、改変可能かわからないので、作者さんに連絡を取ってみてください。 ここのURLを渡して改変許可をもらうのが筋だと思います。 # http://az-store.nrym.org/ の連絡フォームやTwitter http://twitter.com/sakatori で連絡が取れそうです。

haruru0331
質問者

お礼

ありがとうございます。 そうですね、改変に関して作者様に連絡してみたいと思います。 ご丁寧に教えて頂きありがとう御座いました。

関連するQ&A

  • jqueryでのフォント変更について

    今jqueryを勉強していまして、 今回サイトでよくある大中小ボタンを押すとサイト全体のフォントが変更されるように なっているものを制作しようと思っています。 実際実装はできるのですが、キャッシュに入れ次アクセスしても同じフォントサイズ(フォントの大を押してみていた人が、またアクセスした際に同じ)のままでいてほしいんですね。 いろいろと調べましてやったのですがなかなかうまくいかず、 ご教示して頂ければ幸いです。 jquery.jsと、 jquery.cookie.jsは入れています。 jqueryとcssを掲載します。 自分の考えとしましては、boxという箱にclassname(bodyに大きさによって振り分けるためのクラス)と、保持する期間、あとサイトのパスを入れればいいのではないかと思ってるのですが。。。 fontswictherはリストをくくっている親のul要素のID名です。 あとちなみにですが、下記のjsをスマートにまとめられる書き方はございますでしょうか。 そちらも一緒に教えて頂ければ幸いです。 $("#fontswitcher li").attr({href:$.cookie('box')}); var classname = "font-s , font-m , font-l"; $("#fontswitcher li:eq(0)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-s'); $.cookie('box',classname,{expires:10,path:'/'}); }); $("#fontswitcher li:eq(1)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-m'); $.cookie('box',classname,{expires:10,path:'/'}); }) $("#fontswitcher li:eq(2)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-l'); $.cookie('box',classname,{expires:10,path:'/'}); }) body.font-s{ font-size:10px; } body.font-m{ font-size:12px; } body.font-l{ font-size:14px; } お忙しい中恐縮ではございますが、 おわかりになる方、ご教示いただければ幸いです。 どうぞ宜しくお願い致します。

  • jqueryについて

    ただいま、jqueryのtoggle()を使って、 チェックボックスのON/OFFでimgのclassを切り替える(imgをクリックしてチェックボックスをON/OFFもできる)ということを しているのですが、なぜか、チェックボックスをクリックしても、 ボタンの反応はしているのですが、チェック(黒い「レ」)が表示されません。 以下、jsです。 ※チェックボックスと画像の組み合わせは複数あります。 $(function(){ $("li.p01").toggle( function(){ $("input.c01").attr("checked","checked"); $("li.p01").attr("class","p01on"); }, function(){ $("input.check01").removeAttr("checked"); $("li.p01on").attr("class","p01"); } ); $("input.check01").toggle( function(){ $("li.p01").attr("class","p01on"); }, function(){ $("li.p01on").attr("class","p01"); } ); $("li.p02").toggle( function(){ $("input.check02").attr("checked","checked"); $("li.p02").attr("class","p02on"); }, function(){ $("input.check02").removeAttr("checked"); $("li.p02on").attr("class","p02"); } ); $("input.check02").toggle( function(){ $("li.p02").attr("class","p02on"); }, function(){ $("li.p02on").attr("class","p02"); } ); }); ご教授お願いいたします。 また、ボタンが10個あるのですが、 このまま、複製していくのもどうかと思うんですが、 もっと簡単にまとめる方法などあるのでしょうか。 ご回答よろしくお願いいたします。

  • jquery returnについて

    貴重なスペースをお借りいたします。 jqueryを勉強中前々から調べてもよくわからない部分がございまして、 皆様のお力を貸して頂ければとおもいます。。。 jqueryのreturnについてなのですが、 あやふやな部分が多く、どこで使えるのか、どうゆうときに使うのかということが今だに理解できていないところがございます。 $('#photogallery li .imgArea').hide();//ページ上の画像を隠す $(window).bind("load", function(){ var interval = 300; //表示間隔 for(var i=0; i<$('#photogallery li .imgArea').length; i++) setTimeout(doFade(i), interval * i); function doFade(i){ return function(){ $('#photogallery li .imgArea').eq(i).fadeIn(1000); }; } }); 上記は画像のプリロードをするためのjqueryなのですが、最下部のreturn function~の部分ですね、 なぜreturnで関数を返さないといけないのかがさっぱりわかりません。 doFade(i)でfadeInを実行するならreturnをかかなくてもいいのではないかと思い困惑中です。 物分かりが良い方ではなく、どなたかわかりやすく説明していただける方がいたら、 どうぞ宜しくお願い致します。

  • jquery.cookie.jsを使用していますが

    jquery.cookie.jsを使用していますが、ページ遷移した際に、クッキーが外れるみたいなのです。 現象としては、文字サイズや背景色を変えて(別CSSを読み込む)同じ階層のページへ遷移してもそのまま文字サイズも背景色も適用されたままなのですが、別階層(index.htmlからlink/a.htmlなどフォルダ内のHTMLファイル)に遷移すると適用が外れます。そしてlink/a.htmlでサイズ変更してそこからindex.htmlに戻ると変えたはずの文字サイズなどは解除されています。 おそらくjquery.cookie.jsの問題かと思いますが、どこをいじればいいのか分かりません。 お願いします。 以下、jquery.cookie.jsのソースです。 jQuery.cookie = function (key, value, options) { // key and value given, set cookie... if (arguments.length > 1 && (value === null || typeof value !== "object")) { options = jQuery.extend({}, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? String(value) : encodeURIComponent(String(value)), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; };

  • jQueryでXMLを操作

    jQueryでXMLを操作 最近jQueryを勉強しはじめました。 jQueryでXMLを読み込んで、item val="new"を含んだデータのみ<ul></ul>内に表示したいのですが うまくいきません。 ご教授願います。 また、こういったjQueryの使い方に関する、お勧めの本やページ等ございましたら 教えてください。宜しくお願い致します。 -------------------------XML Data------------------------- <data> <item val="new"> <link>01.html</link> <name>ほげ田 ほげ太</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>02.html</link> <name>ほげ田 ほげ子</name > <photo>dummy.jpg</photo> </item> <item val="new"> <link>03.html</link> <name>ほげ山 ほげ太</name > <photo>dummy.jpg</photo> </item> <item> <link>04.html</link> <name>ほげ山 ほげ子</name > <photo>dummy.jpg</photo> </item> </data> -------------------------JavaScript------------------------- $(function(){ $.ajax({ url: 'doctors/data.xml', dataType: 'xml', timeout: 1000, error: function(){ alert("xmlファイルの読み込みに失敗しました"); }, success : function(data){ $("item",data).each(function(){ if($("item",this).attr("val") == "new"){ $(".column").append('<li><a href="'+$("link",this).text()+'"><img src="image/'+$("photo",this).text()+'" alt="'+$("name",this).text()+'" title="'+$("name",this).text()+'"></a></li>'); } }) } }) $("li.noJavaScript").remove(); }) -------------------------HTML------------------------- <div id="wrapper"> <ul class="column"> <li class="noJavaScript">javaScriptを有効にしてください。</li> </ul> </div>

  • jqueryを使いRSS出力の際titleが無い時

    現在jqueryのjfeedを使ってフェイスブックのウォール情報を サイトに出力させようとしているのですが、 フェイスブックの画像を投稿した際、記事自体にTitle要素がないために 以下のコードだとタイトル自体が空欄になってしまいます。 その際の対処として、タイトルが無い場合「No Title」と出力したいのですが どうすればよいでしょうか?? <コード> <script type="text/javascript" src="../js/jquery.jfeed.pack.js" charset="utf-8"></script> <script type="text/javascript"> jQuery(function() { jQuery.getFeed({ url: 'proxy.php?url=<RSSURL>)',success:onComplete}); function onComplete(feed) { var temp = '<ul>'; for(var i = 0; i < feed.items.length && i < 3; i++) { //数字は件数 var item = feed.items[i]; temp += '<li class="feedDate">'+changeDate(item.updated)+'</li>'; temp += '<li align="left" class="feedTitle">'; temp += '<a href="#" target="_blank">' + item.title + '</a>'; temp += '</li>'; } temp += '</ul>'; jQuery('#news').append(temp); } }); //日付表記を変換 function changeDate(str){ var myDate=new Date(str); var YYYY=myDate.getFullYear(); var MM=myDate.getMonth()+1; if(MM<10){MM="0"+MM;} var DD=myDate.getDate(); if(DD<10){DD="0"+DD;} var date=YYYY+'年'+MM+'月'+DD+'日'; return date; } //--> </script>

    • ベストアンサー
    • CSS
  • 同じ i 番目のclassを連動させることはできますか?

    お世話になります <script type="text/javascript"><!-- window.onload = function() { document.getElementsByClassName = function (className) { var i, j, eltClass; var objAll = document.getElementsByTagName ? document.getElementsByTagName("*") : document.all; var objCN = new Array(); for (i = 0; i < objAll.length; i++) { eltClass = objAll[i].className.split(/\s+/); for (j = 0; j < eltClass.length; j++) { if (eltClass[j] == className) { objCN.push(objAll[i]); break; } } } return objCN; } obj0 = document.getElementsByClassName("id"); obj1 = document.getElementsByClassName("pass"); for(i=0;i<obj0.length;i++) { obj0[i].onclick = function() { obj1[i].style.display = "block"; } } } //--></script> <style type="text/css"><!-- .id { width:150px; float:left; cursor:pointer; } .pass { display:none; } .pass0 { width:100px; } --></style> <div class="id">名前1</div> <div class="pass"> <input type="password" name="password" class="pass0"> <input type="button" name="login" value="LOG IN" class="login"> </div> <div class="id">名前1</div> <div class="pass"> <input type="password" name="password" class="pass"> <input type="button" name="login" value="LOG IN" class="login"> </div> のような感じでclass("id")[0]をクリックしたらclass("pass")[0]を表示、class("id")[1]をクリックしたらclass("pass")[1]を表示・・・というふうにしたいのですがなかなかうまくいきません>< 名前とパス両方を入力にしてやる方法もできますし、 それぞれのclass("id")にfunction()を振って obj0[0].onclick = function() { obj1[0].style.display = "block"; } obj0[1].onclick = function() { obj1[1].style.display = "block"; } のようなやり方もできるのはできます 後者のやり方は他の部分でもいろいろ使っているので記事やメンバーが増えるたびに新たに追加していかないといけないので***.onclick = function() { } を配列にするなどまとめてできる方法があれば教えていただきたいのですが^^;

  • class追加でロールオーバーするDOMのjavascript

    イベントハンドラをjs内に内包したロールオーバーを作成していて、 解決できない問題が発生しています。 リンクボタンをクリックして次のページに遷移したあと、 ブラウザの戻るボタンで戻るとonmouseover時の状態で戻ってしまいます。 原因はonunloadが動作がしていないためと思います。 onunloadをonclickにするとこの問題は回避はできますが、 クリックしたら必ず別ページに遷移しなければいけなくなります。 このスクリプトは必ずしもaタグでなくてもロールオーバーできるようにしたいのでうまい解決策ではありません。 何かよい解決方法はありますでしょうか。 // javascript start window.onload = function() { if(!document.getElementsByTagName) return false; var AddClass = document.getElementsByTagName("*"); for(var i=0;i<AddClass.length;i++){ if(AddClass[i].className.match("^(.+? )?addclass.+?( .+?)?$")){ if (document.all){ // IE AddClass[i].onmouseover = AddClassOn; AddClass[i].onmouseout = AddClassOff; AddClass[i].onunload = AddClassOn; }else{ AddClass[i].addEventListener("mouseover", AddClassOn, false); AddClass[i].addEventListener("mouseout", AddClassOff, false); AddClass[i].addEventListener("unload", AddClassOff, false); } } } function AddClassOn() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className; var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG + " " + class_name; id_Node.setAttributeNode(createAttr); } function AddClassOff() { id_name = this.className.replace(/^(.+? )?addclass_(.+?)_.+?( .+?)?$/i,"$2"); class_name = this.className.replace(/^(.+? )?addclass_.+?_(.+?)( .+?)?$/i,"$2") var classNameOG = document.getElementById(id_name).className.replace(class_name,""); var id_Node = document.getElementById(id_name); var createAttr = document.createAttribute("class"); createAttr.nodeValue = classNameOG; id_Node.setAttributeNode(createAttr); } } // javascript end /* style start */ .changeclass{ padding:4px; background:#ff0; border:1px solid #f00; } /* style end */ /* html start */ <body id="knowhow" class="body_test"> <ol> <li><a href="test.html"><img src="image/list01.gif" class="addclass_knowhow_changeclass" width="64" height="64" alt="ボタン" /></a></li> </ol> </body> /* html end */ ちなみに現状のスクリプトはidだけにclass追加するように作っていますが、 最終形は追加するclassのid指定部分をbodyやparentやthisにすることで、 id以外にもclassが追加できる仕様にする予定です。 よろしくお願いいたします。

  • 特定のclassが含まれていたら

    以前、こちらで特定のclassを表示、非表示にする方法を教えていただいたのですが、特定のclassが含まれているタグに対して表示、非表示にしたいと思いまして、質問させていただきました。 現在は<div class="a">a</div>に対して行っており、これを <div class="a b">ab</div>のような感じにも対応したいと考えております。 現在使っているスクリプトは下記になります。 どなたかご教授ください。 宜しくお願いいたします。 function change(site){ if(!document.getElementsByTagName){return;} var cname = new Array(); cname["default"] = new Object("a" == site ? "":"none"); cname["homes"] = new Object("b" == site ? "":"none"); cname["suumo"] = new Object("c" == site ? "":"none"); var objs = document.getElementsByTagName("*"); for(var i=0;i<objs.length;i++){ if(cname[(objs[i].className)] != undefined){ objs[i].style.display = cname[(objs[i].className)]; } } s_n = document.getElementById('site_name'); s_n.value = site; }

  • jQueryを使ったアコーディオンメニュー

    現在、色々なサイトを見ながら、jQueryを使用した アコーディオンメニューを作成しています。(かなりの初心者です。) リンク先をクリックして、ページが移動した際に、 メニューの開いた状態が保持されるようにしたいのですが、 どうすれば良いのかわからず困っています。 //////////////////////////////////////////////// <script type="text/javascript"> <!-- var $j = jQuery; $j(function(){ $j(".acc").each(function(){ $j("a.open", this).each(function(index){ var $this = $j(this); if(index >= 0) $this.next().hide(); $this.click(function(){ var params = {height:"toggle"}; $j(this).next().animate(params).parent().siblings() .children("ul:visible").animate(params); return false; }); }); }); }); //--> </script> html部分 <ul> <li>ABC <ul> <li>A</li> <li>B</li> <li>C</li> </ul> </li>... </ul> //////////////////////////////////////////////// ↑このような感じで表記しています。 どなたかお詳しい方、ご教示よろしくお願いします。