• 締切済み

javascriptについて

現在会社のHPのお問い合わせフォームを作っています。 フォーム画面で確認ボタンを押すと、確認画面を表示させたく、 http://blog.material-being.com/portfolio/auto_confirm/ こちらのページのjavascriptをつかって、作ってみたのですが、 書かれているソースで分からないところがあります。 switch ($(this).attr('type')) { //--------------------------------- // hidden, button, submit:何もしない //--------------------------------- case 'hidden': case 'button': case 'submit': break; //--------------------------------- // checkbox, radio:選択されたラベルの値を取得 //--------------------------------- case 'checkbox': case 'radio': var checkOrRadioName = $(this).attr('name'); //同じName属性の要素を既に処理していなければ if(checkOrRadioNames.indexOf($(this).attr('name')) == -1) { checkOrRadioNames += checkOrRadioName + ','; // x+= y → x = x + y var checks = ''; $(formClass + ' [name="'+checkOrRadioName+'"]:checked').each(function() { //チェックボックスのチェック要素の選択。 if(getLabelCR) { //ラベルの値を取得する場合 var checkOrRadioVal = $('label[for="'+$(this).attr('id')+'"]').html(); }else{ //Valueの値を取得する場合 var checkOrRadioVal = $(this).val(); } if(checks == '') { checks += checkOrRadioVal; }else{ checks += ',' + checkOrRadioVal; } }); $(formClass + ' [name="'+checkOrRadioName+'"]:last').after('<span class="autoConfirmVal">'+ checks +'</span>'); } $('label[for="'+$(this).attr('id')+'"]').css('display', 'none'); break; //--------------------------------- // password:入力文字を"*"記号に置き換える //--------------------------------- case 'password': $(this).after('<span class="autoConfirmVal">'+ $(this).val().replace(/./g, '*') +'</span>'); break; default : $(this).after('<span class="autoConfirmVal">'+ $(this).val() +'</span>'); } このradio部分がよくわかりません。 (1) var checkOrRadioName = $(this).attr('name'); if(checkOrRadioNames.indexOf($(this).attr('name')) == -1) { これは、同じものを検索しているのように見えるのですが、、-1になるのでしょうか? (2) $(formClass + ' [name="'+checkOrRadioName+'"]:checked').each(function() { var checkOrRadioVal = $('label[for="'+$(this).attr('id')+'"]').html(); 上記の大括弧は何を意味するのでしょうか? forとはなんでしょうか。 (3) .eachは繰り返しなのでしょうか? 以上、よろしくお願いいたします。

みんなの回答

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

#1です。 ちゃんとソースを読まずにjavascriptのことばかりと勘違いして回答してしまいました。 すいません。 #2さんのおっしゃるとおりです。 forはhtml要素のlabelの属性なので、「label for」と検索すればよかったですね。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

……あー、for について質問者様も #1 様も誤解されているなぁ……  var checkOrRadioVal = $('label[for="'+$(this).attr('id')+'"]').html(); という式ですが、JQuery では $(なんたら) で処理対象とする要素を絞り込みます。 その絞込みの条件である「なんたら」の部分が今回の場合  'label[for="'+$(this).attr('id')+'"]' となっています。この部分は文字列と何らかの式の結果との連結になっていますので、その「何らかの式の結果」を仮に'hoge'とすると、上で出来上がる文字列は  'label[for="hoge"]' となります。つまり、最初の式は上の条件(ただし"hoge"の部分は可変)を満たす要素内の HTML を checkOrRadioVal に格納しているのです。 では  'label[for="hoge"]' という条件は何を表すのかかという点ですが、CSS では処理を行う対象を絞り込む方法の一つとして、その要素が持つ属性とその値での絞り込みが可能となっています。 http://www.htmq.com/selector/attrvalue.shtml つまり、この条件は for という属性として hoge という値を持っている label を絞り込んでいるのです。 ええ、つまりこの for は JavaScript の制御構文としての for ではなく HTML のタグ label の属性としての for なのです。 http://www.htmq.com/html/label.shtml

  • tracer
  • ベストアンサー率41% (255/621)
回答No.1

forをご存知ない以上、おそらく何を説明しても、疑問が疑問を呼ぶでしょう。forは最も基本的な文法です。一応、なんとなくは説明しますが、forやeachなどは、検索すればすぐ出るわけですから、まず最低限調べてから質問されてはいかがでしょうか。 1. 検索した結果がfalseだった(見つからなかった)場合を想定しています。 javascriptでは、falseと-1は同義に扱えます。 2. たくさんカッコがあるので、何を指して質問されているのかわかりません。。。 3. 文法からしておそらくjQueryというライブラリを使用しています。 eachはjQueryのメソッドで、DOMを繰り返し処理する際に使用します。 ちなみに、forもループ処理ですが、eachはDOM専用の繰り返し処理といったところです。 ちなみのちなみに、DOMというのは・・・ね? 疑問が疑問を呼ぶでしょ? 余計なおせっかいですが、質問者さんがサンプルで実装するのはまだ段階的に早すぎると思います。もう少し最低限の知識をつけるべきです。

miyake3450
質問者

お礼

ありがとうございます forは for(x=1; x<50; x++){} での使い方でしか見たことなかったもので、 for=を検索してもなかなか出てこず、この場をお借りしました。 自分でも調査中です。

関連するQ&A

  • JavaScriptの記述を教えて下さい。

    はじめまして、charliehamaといいます。 素人なもので、JavaScriptに詳しい方、教えて下さい。 次のコード(全体の中の一部)があります。 <!-- // ------------------------------------------------- // HTML生成関数 // ------------------------------------------------- function disp(){ //各要素を変数に格納 var $day = $(this).find('day').text(); var $label = $(this).find('label').text(); var $category = $(this).find('category').text(); var $content = $(this).find('content').text(); var $url = $(this).find('url').text(); var $target = $(this).find('target').text(); //HTMLを生成 $('<tr>'+ '<th>'+$day+'</th>'+ '<td class="label"><span class="'+$label+'">'+$category+'</span></td>'+ '<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>'+ '</tr>').appendTo('table.tbl tbody'); } --> 変数$urlについて、if構文で分岐させるにはどのように記述すればよいですか? (1) $urlがxxxの時、<td><span class="abc">'+$content+'</span></td> とする。 (2) $urlがそれ以外の時、<td><a href="'+$url+'" target="'+$target+'">'+$content+'</a></td>とする。 (3) (1)と(2)以外の処理は変更しない。 質問の仕方が悪ければご指摘下さい。 困っています。 どうかよろしくお願い申し上げます。

  • Javascriptリアルタイムエラーチェック

    Javascript初心者です。 本を見ながらフォームの入力値のリアルタイムエラーチェックを実装しています。 テキストフィールドへの入力値の妥当性検証はできるのですが、 チェックボックスが一つもチェックされていなかった場合にチェックボックスを囲むfieldsetを赤くさせるのがうまくいきません。 電話番号の形式指定ならば String.prototype.isZip = function(){ return this.isEmpty()||/^\d{3}-\d{4}$/.test(this); } という形です。thisはname属性を参照します。 すべての項目にエラーがない場合に確認画面へ進めるようにしています。 String.prototype.isNotEmpty = function() { return this != ''; } String.prototype.isEmpty = function(){ return this == ''; } String.prototype.isShorterThan = function(n){ return this.length<=n; } String.prototype.isLongerThan = function(n){ return this.length >= n; } String.prototype.isZip = function(){ return this.isEmpty()||/^\d{3}-\d{4}$/.test(this); } String.prototype.isPhone = function() { return this.isEmpty()||/^\d{2,4}-\d{1,4}-\d{4}$/. test(this); } String.prototype.isEmail = function() { return this.isEmpty()||/^([\w-]+\.?)+@[\w-]+(\.([\w-]+))+$/.test(this); } var formValidation = function(name, feedback, fields){ var form = document.forms[name]; for (var i=0; i<form.elements.length; i++){ (function(){ var elm = form.elements[i]; var f = fields[elm.name]; if (f){ f.element = elm; f.process = function(){ var ok = true; if (f.convert) f.element.value = f.convert(f.element.value); if (f.validation) ok = f.validation(f.element.value); if (f.feedback) f.feedback(ok, f.element); return ok; } elm.onblur = function(e){ f.process() } } })(); } form.onsubmit = function(){ var all_ok = true; for (key in fields) if (fields[key] && !fields[key].process()) all_ok = false; return feedback(all_ok); }; } </script> <script type="text/javascript"> <!-- <![CDATA[ window.onload = function(){ var fields = { 'last_name':{ convert: function(val){ return val.cnvKana('asKV').trim() }, validation: function(val){ return val.isNotEmpty() && val.isShorterThan(16) }, feedback: function(ok, elm){elm.style.border = ok ? 'solid 2px #3CB371' : 'solid 2px f57272'; } }, 'furigana':{ convert: function(val){ return val.cnvKana('sKVC').trim() }, validation: function(val){ return val.isNotEmpty() && val.isComposedOf(cs.kata.zen+cs.space.han) && val.isShorterThan(32) }, feedback: function(ok, elm){ elm.style.border = ok ? 'solid 2px #3CB371' : 'solid 2px f57272'; } }, 'phone':{ convert: function(val){ return val.cnvPhone() }, validation: function(val){ return val.isNotEmpty() && val.isPhone() }, feedback: function(ok, elm){elm.style.border = ok ? 'solid 2px #3CB371' : 'solid 2px f57272';} } 'email':{ convert: function(val){ return val.trim() }, validation: function(val){ return val.isNotEmpty() && val.isEmail() }, feedback: function(ok, elm){ elm.style.border = ok ? 'solid 2px #3CB371' : 'solid 2px f57272';}, }, }; var feedback = function(ok){ if (ok) alert("確認画面へ進みます。"); else alert("フォームの内容に不備があるようです。再度の確認をお願いいたします。") return ok; }; new formValidation('MAINFORM', feedback, fields); } // ]]> --> <form name="MAINFORM" action="check.php" method="post"> <input name="last_name" type="text"> <input name="furigana" type="text" /> ~~~~~~ <fieldset id="checkboxDemo" name="job"> <legend><img src="images/label_kozanaiyou.gif" width="92" height="18"></legend> <label for="checkbox-1" tabindex="1">オフィス(Word,Excel)</label> <input type="checkbox" name="kouza[]" id="checkbox-1" value="オフィス(Word,Excel)" /> <label for="checkbox-2" tabindex="2">ネットワーク構築</label> <input type="checkbox" name="kouza[]" id="checkbox-2" value="ネットワーク構築" /> <label for="checkbox-3" tabindex="3">WEBデザイン</label><input type="checkbox" name="kouza[]" id="checkbox-3" value="WEBデザイン" /> <label for="checkbox-4" tabindex="4">WEBプログラミング</label> <input type="checkbox" name="kouza[]" id="checkbox-4" value="WEBプログラミング" />  </fieldset> 自分で色々と試してみましたがうまくいかず、皆様のお力を借りたいと思い投稿しました。 詳しい方教えてください。

  • javascriptを使用したメール送信の処理方法

    本を参考に独学で問合せフォームを作成しています。(初心者です) 未入力項目が0の時は送信ボタンを押すと(phpに)送信できるようにしたいのですが、javascriptにどのようなコードを入れればよいのでしょうか。 下記は本に記載されているコードなのですが、下記だけだと送信することが出来ません。 ご教示お願いします。 【js】の下記の部分にコードを入れればいいのかと思うのですが、どういうコードをどのように入れればいいのかわかりません。 //エラーカウントが0であれば、エラー無し if( errorCount == 0 ){ alert( '送信内容にエラーはありません。' ); }; また、下記のHTMLの最初の行の<form id="myForm" method="post" >にaction="info.php"を入れてみましたが、info.phpに飛ばないのですがどうしてなのでしょうか? 【HTML】 <form id="myForm" method="post" > <table> <tr> <th><label for="formName">名前 <span class="ind">必須</span></label></th> <td><input type="text" name="formName" id="formName"></td> </tr> <tr> <th><label for="formFurigana">ふりがな <span class="ind">必須</span></label></th> <td><input type="text" name="formFurigana" id="formFurigana"></td> </tr> <tr> <th><label for="formTell">電話番号 <span class="ind">必須</span></label></th> <td><input type="text" name="formTell" id="formTell"></td> </tr> <tr> <th><label for="formMail">メールアドレス <span class="ind">必須</span></label></th> <td><input type="text" name="formMail" id="formMail"></td> </tr> <tr> <th><label for="formInquiry">お問い合わせ内容 <span class="ind">必須</span></label></th> <td><textarea rows="9" name="formInquiry" id="formInquiry"></textarea></td> </tr> </table> <p><input type="submit" value="送信内容を確認する"></p> </form> </div> 【jsのコード】 $(function(){ function setMyForm(target){ var ERROR_MESSAGE_CLASSNAME = 'errorMsg'; //エラー時のメッセージ要素のclass名 var ERROR_INPUT_CLASSNAME = 'errorInput'; //エラー時のinput要素のclass名 var items = []; //チェック対象となるテキスト入力要素を格納した配列 //項目チェックする var checkAll = function(){ var errorCount = 0; //項目:名前のチェック checkEmptyText( items[0], '名前をご入力ください。' ); //項目:ふりがなのチェック checkEmptyText( items[1], 'ふりがなをご入力ください。' ); //項目:電話番号のチェック checkEmptyText( items[2], '電話番号をご入力ください。' ); //項目:メールアドレスのチェック checkEmptyText( items[3], 'メールアドレスをご入力ください。' ); //項目:お問い合わせ内容のチェック checkEmptyText( items[4], 'お問い合わせ内容をご入力ください。' ); //input,textareaのチェック for( var i=0; i<items.length; i++ ){ if( items[i].prop('isSuccess') == false ){ errorCount++; }; }; //エラーカウントが0であれば、エラー無し if( errorCount == 0 ){ alert( '送信内容にエラーはありません。' ); }; }; //エラーメッセージの追加 var addErrorMessage = function(selector, msg){ removeErrorMessage(selector); selector.before('<span class="'+ERROR_MESSAGE_CLASSNAME+'">'+msg+'</span>'); selector.addClass(ERROR_INPUT_CLASSNAME); }; //エラーメッセージの削除 var removeErrorMessage = function(selector){ var msgSelector = selector.parent().find('.'+ERROR_MESSAGE_CLASSNAME); if( msgSelector.length != 0 ){ msgSelector.remove(); selector.removeClass(ERROR_INPUT_CLASSNAME); }; }; //input,textareaの未入力チェック var checkEmptyText = function(selector, msg){ if( selector.val() == '' ){ addErrorMessage(selector, msg); selector.prop('isSuccess', false); }else{ removeErrorMessage(selector); selector.prop('isSuccess', true); }; }; //初期設定 var init = function(){ //submitイベントの設定 target.on({ 'submit': function(){ checkAll(); return false; } }); //input要素を配列に格納 items = [ target.find('input[name=formName]'), target.find('input[name=formFurigana]'), target.find('input[name=formTell]'), target.find('input[name=formMail]'), target.find('textarea[name=formInquiry]') ]; //input要素のプロパティを設定 $.each(items, function(index){ items[index].prop('isSuccess', false); }); //enterキーでsubmitしてしまうのを防止する target.find('input[type=text]').on({ 'keypress': function(e){ if( (e.keyCode == 13) ) return false; } }); }; init(); }; setMyForm($('#myForm')); });

  • jQueryのfocus,blurが機能しません。

    初めまして。jquery初心者です。宜しくお願いします。 フォームの入力項目に『検索したい言葉を入力してください』だとか、『お名前を入力してください』というテキストが薄い色で入っていて、テキスト内をクリックして入力状態になると、中のテキストが消えるというしくみをjQueryでやっているのですが、上手く行きません。 <HTML> <form name="form1" method="post" action="https://www.rescue.ne.jp/form/mail.cgi"> <p> <label for="namae">お名前</label> <input class="guideText" type="text" name="namae" id="namae" value="お名前を入力してください。"> </p> <p> <label for="email">メールアドレス</label> <input class="guideText" type="text" name="email" id="email" value="メールアドレスを入力してください。"> </p> <p> <label for="comment">お問い合わせ内容</label> <textarea class="guidetext" name="comment" id="comment">メッセージを入力してください。</textarea> </p> <p> <input type="submit" name="button" id="button" value="お問い合わせ送信"> </p> </form> 一番上の『お名前を入力してください。』の部分だけ機能しますが、文字の色が 最初サイトを開くと黒になり、テキストをクリックすると文字が消え、フォーカスを外すと薄いグレーになります。これを、最初から薄いグレーで表示させたいのと、『メールアドレス』『お問い合わせ内容』も同じようにfocus,blurを適用させたいです。 // JavaScript Document $(function(){ $('.guideText').each(function(){ var guideText = this.defaultValue; var element = $(this); element.focus(function(){ if(element.val()===guideText){ element.val(''); element.removeClass('guide'); } }); element.blur(function(){ if(element.val()===''){ element.val(guideText); element.addClass('guide') } }); if(element.val()===guidetext){ element.addClass('guide'); } }); }); <HTML>では、class="guidetext"とすべて適用させてるのに上手く機能しません。 自分では限界なので相談させていただきました。 どうか、宜しくお願い致します。

  • 【jQUery】表示される数字をカンマで区切りたい

    予約フォームを作っているのですが、 表示される合計金額をカンマ区切りで表示したいです。 (最高金額は360,000なので、カンマは1回で大丈夫です) 下記ソースですが、 toLocaleStringメソッドを使用するというのを見つけ、 Number($('.s.kingaku').text(n_s*p_s)).toLocaleString(); という風に書きましたが、変化はありませんでした。 別の方法でもいいので、どなたかご教示いただけませんでしょうか。 -----------js---------- $(function(){ $('[name=datename]').on('change',function(){ $(this).closest('label').nextAll('.parent:eq(0),.children:eq(0)').prop('disabled',!$(this).prop('checked')); }).trigger('change'); $(':checkbox,select').on('change click',function(){ var souryo=0; var p_s=9000; var p_a=6000; var n_s=0; var n_a=0; $('.parent:not(:disabled):not(:has(option[value=""]:selected))').each(function(){ if($(this).val()=="S") n_s+=parseInt($(this).next('.children').val()); if($(this).val()=="A") n_a+=parseInt($(this).next('.children').val()); }); $('.s.maisu').text(n_s); $('.a.maisu').text(n_a); $('.s.kingaku').text(n_s*p_s); $('.a.kingaku').text(n_a*p_a); if(n_s+n_a>=16){ souryo=1200; }else if(n_s+n_a>=11){ souryo=1000; }else if(n_s+n_a>=1){ souryo=850; } $('.souryo').text(souryo); $('.all.kingaku').text(n_s*p_s+n_a*p_a+souryo); }).eq(0).trigger('change'); }); ----------html---------- <dd class="required"> <div id="result"> S席:合計<span class="s maisu">0</span>枚 × 9,000円 = <span class="s kingaku">0</span>円<br> A席:合計<span class="a maisu">0</span>枚 × 6,000円 = <span class="a kingaku">0</span>円<br> 送料:<span class="souryo"></span>円(~10枚:850円,~15枚:1000円,16枚~:1200円)<br> 合計:<span class="all kingaku">0</span>円 </div> </dd>

  • 簡潔なJavaScriptで実現したい

    次のような、btnToggleというクラス名のdivタグがいくつかあるHTMLで、 それぞれクリックするとそれぞれの「開く/閉じる」が反転するという動きをさせたいです。 <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>AAA</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>BBB</div> </div> <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>CCC</div> </div>    : <div class="btnToggle"><a href="#"><span>+</span>開く</a> <div>XXX</div> </div> 下記のようなJavaScriptで実行してみたのですが、 いくつかのdivタグをそれぞれクリックすると、flgの値と現在の状態が入れ替わってしまいます。 クラス名が同じで、flgも一つの変数なので当たり前なのですが… <script type="text/javascript"> $(document).ready(function(){ var flg = "close"; $(".btnToggle").click(function(){ if(flg == "close"){ $(this).html("<span>-</span>閉じる"); flg = "open"; }else{ $(this).html("<span>+</span>開く"); flg = "close"; } }); }); </script> 私が考えられることは、classではなく、idで「btnToggle1」「btnToggle2」「btnToggle3」…などと定義し、 JavaScriptのプログラムを次のように書くしか思いつかないのですが、 これでは、我ながら間抜けなプログラムだなと思いました。 <script type="text/javascript"> $(document).ready(function(){ var flg1 = "close"; $(".btnToggle1").click(function(){ if(flg1 == "close"){ $(this).html("<span>-</span>閉じる"); flg1 = "open"; }else{ $(this).html("<span>+</span>開く"); flg1 = "close"; } }); var flg2 = "close"; $(".btnToggle2").click(function(){ if(flg2 == "close"){ $(this).html("<span>-</span>閉じる"); flg2 = "open"; }else{ $(this).html("<span>+</span>開く"); flg2 = "close"; } }); var flg3 = "close"; $(".btnToggle3").click(function(){ if(flg3 == "close"){ $(this).html("<span>-</span>閉じる"); flg3 = "open"; }else{ $(this).html("<span>+</span>開く"); flg3 = "close"; } });        :        : }); </script> 配列などを使えばもっと簡潔になるのでしょうか。 どうか教えてくださいますようお願い申し上げます。

  • javascriptカウントダウン終了後別ページへ

    javascriptでカウントダウン終了後に別ページに飛ばすリンクを表示したいのですが、どのようにすれば教えていただけますでしょうか? 下記スクリプトではカウントダウン終了時に「終了しました」と表示されます。 その「終了しました」にリンクを貼りたいです。 <script language="JavaScript" type="text/javascript"> function CountdownTimer(elm,tl,mes){ this.initialize.apply(this,arguments); } CountdownTimer.prototype={ initialize:function(elm,tl,mes) { this.elem = document.getElementById(elm); this.tl = tl; this.mes = mes; },countDown:function(){ var timer=''; var today=new Date(); var day=Math.floor((this.tl-today)/(24*60*60*1000)); var hour=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*60*1000)); var min=Math.floor(((this.tl-today)%(24*60*60*1000))/(60*1000))%60; var sec=Math.floor(((this.tl-today)%(24*60*60*1000))/1000)%60%60; var milli=Math.floor(((this.tl-today)%(24*60*60*1000))/10)%100; var me=this; if( ( this.tl - today ) > 0 ){ if (day) timer += '<span class="day">'+day+':</span>'; if (hour) timer += '<span class="hour">'+hour+':</span>'; timer += '<span class="min">'+this.addZero(min)+':</span><span class="sec">'+this.addZero(sec)+':</span><span class="milli">'+this.addZero(milli)+'</span>'; this.elem.innerHTML = timer; tid = setTimeout( function(){me.countDown();},10 ); }else{ this.elem.innerHTML = this.mes; return; } },addZero:function(num){ return ('0'+num).slice(-2); } } function CDT(){ var tl = new Date('2013/2/1 00:00:00'); var timer = new CountdownTimer('CDT',tl,'終了しました'); timer.countDown(); } window.onload=function(){ CDT(); } </script>

  • javascriptについて

    現在HPを作成していてjavaのプルダウンメニューを設置していますが 最初からメニューが開いた状態になります。ちなみにsdmenu.jsを使用しています。 最初開いた時にメニューが閉じるようにできますでしょうか? function SDMenu(id) { if (!document.getElementById || !document.getElementsByTagName) return false; this.menu = document.getElementById(id); this.submenus = this.menu.getElementsByTagName("div"); this.remember = true; this.speed = 4; this.markCurrent = true; this.oneSmOnly = false; } SDMenu.prototype.init = function() { var mainInstance = this; for (var i = 0; i < this.submenus.length; i++) this.submenus[i].getElementsByTagName("span")[0].onclick = function() { mainInstance.toggleMenu(this.parentNode); }; if (this.markCurrent) { var links = this.menu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) if (links[i].href == document.location.href) { links[i].className = "current"; break; } } if (this.remember) { var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)"); var match = regex.exec(document.cookie); if (match) { var states = match[1].split(""); for (var i = 0; i < states.length; i++) this.submenus[i].className = (states[i] == 0 ? "collapsed" : ""); } } }; SDMenu.prototype.toggleMenu = function(submenu) { if (submenu.className == "collapsed") this.expandMenu(submenu); else this.collapseMenu(submenu); }; SDMenu.prototype.expandMenu = function(submenu) { var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var links = submenu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) fullHeight += links[i].offsetHeight; var moveBy = Math.round(this.speed * links.length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight + moveBy; if (newHeight < fullHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = ""; mainInstance.memorize(); } }, 30); this.collapseOthers(submenu); }; SDMenu.prototype.collapseMenu = function(submenu) { var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight - moveBy; if (newHeight > minHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = "collapsed"; mainInstance.memorize(); } }, 30); }; SDMenu.prototype.collapseOthers = function(submenu) { if (this.oneSmOnly) { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); } }; SDMenu.prototype.expandAll = function() { var oldOneSmOnly = this.oneSmOnly; this.oneSmOnly = false; for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className == "collapsed") this.expandMenu(this.submenus[i]); this.oneSmOnly = oldOneSmOnly; }; SDMenu.prototype.collapseAll = function() { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); }; SDMenu.prototype.memorize = function() { if (this.remember) { var states = new Array(); for (var i = 0; i < this.submenus.length; i++) states.push(this.submenus[i].className == "collapsed" ? 0 : 1); var d = new Date(); d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000)); } };

  • 同時に複数重複する項目だけを絞り込ませたいです。

    3つの項目を絞り込む機能を実現したいです。 実現させたいことは、 チェックを1つ付けると、その項目だけしかないものを絞り込み、 チェックを2つ付けた場合は、その項目が両方あるものだけを絞りこみたいです。 現在は項目は3種類だけですが種類が増えても更新に負担がかからないようにしたい 試しましたが、チェックが2つ以上になると重複させて機能させることができませんでした。 アドバイスを頂けないでしょうか。 <html lang="ja"> <head> <script type="text/javascript"> function fff() { var elm = document.getElementById('test1'); var tag = document.getElementsByTagName('input'); var svalue1 = new Array(); var svalue2 = new Array(); var svalue3 = new Array(); var ccc; for(i=0, elmL=elm.children.length; i<elmL; i++){ var spanTAG = elm.children[i].getElementsByTagName('span'); svalue1[i] = new Array(); svalue2[i] = new Array(); svalue3[i] = new Array(); for(m=0, spanL=spanTAG.length; m<spanL; m++){ if(spanTAG[m].className == "span1"){ svalue1[i][m] = spanTAG[m].innerHTML; }else if(spanTAG[m].className == "span2"){ svalue2[i][m] = spanTAG[m].innerHTML; }else if(spanTAG[m].className == "span3"){ svalue3[i][m] = spanTAG[m].innerHTML; } if(tag[0].checked && !tag[1].checked && !tag[2].checked){num=1;}else if(tag[1].checked && !tag[0].checked && !tag[2].checked){num=2;}else if(tag[2].checked && !tag[0].checked && !tag[1].checked){num=3;}else if(tag[0].checked && tag[1].checked && !tag[2].checked){num=4;}else if(tag[0].checked && tag[2].checked && !tag[1].checked){num=5;}else if(tag[1].checked && tag[2].checked && !tag[0].checked){num=6;}else if(tag[0].checked && tag[1].checked && tag[2].checked){num=7;}else{num=8;} switch(num){ case 1: if(new RegExp(tag[0].value).test(svalue1[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[2].value).test(svalue3[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 2: if(new RegExp(tag[1].value).test(svalue2[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 3: if(new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 4: if(new RegExp(tag[0].value).test(svalue1[i][m]) && new RegExp(tag[1].value).test(svalue2[i][m]) && !new RegExp(tag[2].value).test(svalue3[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 5: if(new RegExp(tag[0].value).test(svalue1[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[1].value).test(svalue2[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 6: if(new RegExp(tag[1].value).test(svalue2[i][m]) && new RegExp(tag[2].value).test(svalue3[i][m]) && !new RegExp(tag[0].value).test(svalue1[i][m])){ elm.children[i].style.display = 'block'; }else{ elm.children[i].style.display = 'none'; } break; case 7: case 8: elm.children[i].style.display = 'block'; break; } } } } </script> </head> <body> <form action="#"> <ul> <li><input type="checkbox" name="c1" id="c1" value="aaa" onclick="fff()" /><label for="c1">aaa</label></li> <li><input type="checkbox" name="c2" id="c2" value="bbb" onclick="fff()" /><label for="c2">bbb</label></li> <li><input type="checkbox" name="c3" id="c3" value="ccc" onclick="fff()" /><label for="c3">ccc</label></li> </ul> </form> <div id="test1">  <div class="test2">   <span class="span3">ccc</span>   <span class="span2">bbb</span>   <span class="span1">aaa</span>   </div>  <div class="test2">   <span class="span3">ccc</span>   <span class="span1">aaa</span>  </div>  <div class="test2">   <span class="span2">bbb</span>   <span class="span1">aaa</span>  </div>  <div class="test2">   <span class="span3">ccc</span>  </div>  </body

  • jQueryでの記述をjavascriptに

    下記のjQueryの記述をライブラリ無しのjavascriptでの記述にしていただきたいです。 imgタグのsrc属性とaタグのhref属性を相対パスから絶対パスに動的に変換させる必要があるのですが、ある事情でjQueryを使えないとの事で困っています。 どうかよろしくお願い致します。 <script type="text/javascript"> $(function(){ $('#hoge').children('img:not([src^=http])').each(function (){ var imgSrc = $(this).attr('src'); $(this).attr('src','http://xxxxxxxxxxxx' + imgSrc); }); $('#hoge').children('a[href^=○○○]').each(function (){ var aHref = $(this).attr('href'); $(this).attr('href','http://xxxxxxxxxxxx' + aHref); }); }); </script>

専門家に質問してみよう