• 締切済み

特定の文字列が入っているcheckboxのみオン

初めて投稿いたします。 javascriptのcheckbox機能について質問させていただきます。 下記の機能を持ったjavascriptのブックマークレットを探しています。 1.の機能を持ったスクリプトを最優先とし、可能であれば、2.の機能も複合した形での スクリプトであると大変ありがたいです。 1.特定の文字列が記載されているチェックボックスだけをオンにする (□をチェックボックスとします) □a □b □c □d □aa □ab □ac □ad □aa □ab □ac □ad というようなチェックボックス郡があったときに、"a"と"ac"と"ad"の文字列が記載されているチェックボックスのみ チェックを入れるスクリプトです。なお、チェックボックスの数や記載内容は毎回異なります。 たとえば"ac"が記載されているチェックボックスが存在しないこともあり、その場合は"a"と"ad"が 記載されているチェックボックスのみチェックが入るようにしたいです。 チェックされる文字列の記載内容や種類(上記例の場合は"a","ac","ad"の3種類)が簡単に書き換え可能な スクリプトであれば尚良いです。 2.チェック可能な数量を限定する 1.で記載したチェック対象の文字列("a","ac","ad")が記載されているチェックボックスにチェックが入る際、 "a"が記載されたチェックボックスは最大で3個まで、 "ac"が記載されたチェックボックスは最大で5個まで、 "ad"が記載されたチェックボックスは最大で10個までしかチェックされないようにしたいです。 その際、チェックされるチェックボックスの選択方法に指定はありません。 たとえば"a"が記載されているチェックボックスにチェックが入る際、前から3個、後ろから3個、ランダムで3個 いずれのパターンであっても構いません。 こちらについても、最大数量を簡単に書き換え可能なスクリプトであると尚良いです。 拙い文章かと思いますが、ご回答いただける方をお待ちしております。

みんなの回答

回答No.3

alert(encodeURIComponent('ターゲットの文字')); これで出てきた文字を、 {text:'%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%81%AE%E6%96%87%E5%AD%97',max:2} みたいにする。 文字コードは utf-8 にする。 すこしは、調べてから…>俺

回答No.2

<a href="javascript:(function%20(){Array.prototype.forEach.call(arguments,function(a){this.filter(function(a){return a[1]==this.text},a).forEach(function(a,i){a[0].checked=i<this.max},a)},Array.prototype.map.call(document.querySelectorAll('input[type=checkbox]'),function(c){return[c,c.nextSibling.nodeValue.replace(/^\s+|\s+$/g,'')]}))})({text:'a',max:5},{text:'ab',max:3},{text:'ad',max:2})">go</a> 空白を無くし、無くせない空白は%20 にするだけじゃね?

suteteko330
質問者

お礼

早速のご回答ありがとうございます。 最初のご回答で記載されているテスト用のHTMLでは、ちゃんと動作することが確認できました。 しかし、私がスクリプトを使用したいウェブページでは動作しませんでした。 スクリプトを使用したいウェブページでは、チェックボックスに記載されている文字が日本語であるため、 babu_baboo様が記載してくださったスクリプトの最後のa,ab,adを対象の日本語に書き換えています。 今回動作しなかった原因として下記を挙げてみました。該当しそうな原因がありそうでしょうか。 1.対象文字が日本語であること 2.対象文字に【】のような特殊文字が使われていること 3.スクリプトを使用したいウェブページのチェックボックス群のname属性が、0からの連番になっていること(value属性は全チェックボックスで同じ値が使用されていました) たびたびのご相談で申し訳ございません。 ご回答いただければと思います。

回答No.1

1ぎょうで かけると おもったのに てすとようのHTMLが・・・ Array.map |.forEach |.filter, querySelectorAll がつかえるならOK? <!DOCTYPE html> <title>checkbox</title> <body> <form> <p> <input type="checkbox" name="a" value="1">a <input type="checkbox" name="a" value="2">b <input type="checkbox" name="a" value="3">c <input type="checkbox" name="a" value="3">d </p> <p> <input type="checkbox" name="ab" value="1">a <input type="checkbox" name="ab" value="2">b <input type="checkbox" name="ab" value="3">c <input type="checkbox" name="ab" value="3">d </p> <p> <input type="checkbox" name="abc" value="1">a <input type="checkbox" name="abc" value="2">a <input type="checkbox" name="abc" value="3">a <input type="checkbox" name="abc" value="3">a </p> <p> <input type="checkbox" name="abcd" value="1">aa <input type="checkbox" name="abcd" value="2">ab <input type="checkbox" name="abcd" value="3">ac <input type="checkbox" name="abcd" value="3">ad </p> <p> <input type="checkbox" name="abcde" value="1">aa <input type="checkbox" name="abcde" value="2">ab <input type="checkbox" name="abcde" value="3">ac <input type="checkbox" name="abcde" value="3">ad </p> <p> <input type="checkbox" name="abcdef" value="1">aa <input type="checkbox" name="abcdef" value="2">ab <input type="checkbox" name="abcdef" value="3">ac <input type="checkbox" name="abcdef" value="3">ad </p> <input type="button" value="test" onclick="hoge ({text:'a', max:5}, {text:'ab', max:'3'}, {text:'ad', max:'2'});"> </form> <script> function hoge () {  Array.prototype.forEach.call (arguments, function (arg) {   this.filter (function (ary) { return ary[1] == this.text }, arg)      .forEach (function (ary, i) { ary[0].checked = i < this.max }, arg);  }, Array.prototype.map.call (document.querySelectorAll ('input[type=checkbox]'),     function (chk) { return [chk, chk.nextSibling.nodeValue.replace (/^\s+|\s+$/g, '')]})); } </script>

suteteko330
質問者

お礼

babu_baboo様 ご回答いただきありがとうございます。 ご回答内容を拝見して、こちらの説明が余りに不十分であったと反省しております。 再度状況を下記に記載いたします。 <背景・目的> チェックボックス付きのウェブページはあらかじめ存在しており、 私が質問に1.記載したようなチェックボックス群が既に備わっています。 こちらが求められる動作は、そのウェブページ内の特定の文字列を含むチェックボックスのみ チェックを入れるだけです。その動作を行うことができるブックマークレットを探しております。 <現状> 似たようなブックマークレットとして、ページ内の全てのチェックボックスにチェックを 入れることができるものがあります。 (ご参照 http://www.programming-magic.com/20080122235436/ ) 全てにチェックを入れるブックマークレットは上記ページの他、至る所で紹介されているのですが、 特定の文字列が記載されているものだけを選択できるブックマークレットを見つけることはできませんでした。 <希望するブックマークレット> ・ 特定の文字列が記載されているチェックボックスのみまとめてチェックを入れることが可能 ・ 対象となる特定文字列はスクリプト上で簡単に編集できることが望ましい (今回は”a”,”ac”,”ad”が記載されているチェックボックスをONにしたいが、 次回は”b”,”aa”だけをONにしたい、といった場合にスクリプト編集が容易であると良いです) ・ 特定の文字列ごとにチェックされる数に制限を設けたい【上記2つの希望内容より優先度は低いです】 ("a"が記載されたチェックボックスは最大で3個、"ac"が記載されたチェックボックスは最大で5個まで、 "ad"が記載されたチェックボックスは最大で10個までといった感じです。 この制限数もスクリプト上での編集が容易であることが望ましいです) 上記の内容をまとめて実現可能なブックマークレットを求めております。 引き続きご回答いただける方をお待ちしております。

関連するQ&A

  • 文字列+数字から最大を抽出する関数

    あああ1 あああ2 いいい1 aa1 あああ3 ab1 ab2 いいい2 ab3 ab4 ab5 以上のようなデータが 縦1列に並んでいます。 これを以下のように抽出するには どのような数式を組めばいいですか? ご教授お願いします! (文字列が)あああ(の最大は)3 (文字列が)いいい(の最大は)2 (文字列が)aa (の最大は)1 (文字列が)ab (の最大は)5

  • Access レポートでiif関数で文字列検索

    Accessのレポートで、iif関数である文字列を検索して、それがあれば非連結テキストボックスに「ありました!」とメッセージを入れたいのですが、できますでしょうか? レポートの内容は、商品リストで下記のようなフィールドからなっています。 個数 商品名 ------------------------------- 2 ミカンAA 3 ミカンAB 1 リンゴAB 2 リンゴAB ------------------------------- たとえば、商品名に文字列「AA」が含まれる商品個数の総合計を求めるときは、下記でできました。 非連結のテキストボックスのプロパティ = Sum(IIF([商品名] Like "*AA*",[数量],0)) しかし、下記のようにメッセージを入れたいのですが、文字列「AA」が含まれていても何も入りません。 = (IIF([商品名] Like "*AA*","ありました!",0) どこが悪いのかどなたか助けてください。

  • エクセルの関数について

    下記のようなことが関数で出来ますか? A1セルに「AA AB AC AD AE」というデータがあったときに、 B1に、A1に「AB」か「AC」という文字列があればそれを取り出す。なければブランク(もしくは#N/A) かつ優先順位もつけたい。 (「AB」も「AC」もある場合は「AB」) 「AA」と「AB」の間など、文字間は必ず半角スペースがあいている状態です。 具体的な例は↓の画像のような感じです。 かなり高度だと思うんですが、関数で実現できますでしょうか? よろしくお願いします。

  • 同列にある重複文字列のチェック方法

    Googleスプレッドシート上で同列にある文字列の重複をチェックする方法として、隣のセル(B列)に「=COUNTIF(A$2:A$999;A4)>1」と書く方法を使っています。この方法を使うとA列に重複した文字列を入力すると、重複した文字列横のB列にTRUEと表示されます。 しかしこのやり方だとA列に文字列を入力後、B列もエクセルで言うオートフィルみたいなことをしなければならず面倒なので、スクリプトで重複チェックできないものかと考えています。 ですがJavaScriptは初心者なので書き方が分からず苦戦中です。どなたか、手がかりとなるスクリプトやヒントをご教示いただけませんでしょうか。

  • ファイルからの文字列を検索

    テキストファイルを読み込み、任意の文字列を探すプログラムを作成しました。 これを改良し、ワイルドカード入力をした場合、*をa~zとA~Zに変えて、それぞれで検索しようとしています。ワイルドカードにはいる文字は1文字です。 「a*」と検索すれば「aa」、「ab」~「az」、「aA」、「aB」~「aZ」と検索し、合致したものを出力したいのです。 回答が欲しいとは思いますが、ヒントや考え方など何でも結構ですので、お力添えをお願いいたします。

  • 特定文字列を消したい

    「あ」で始まり「お」で終わる文字列を消したいのです 外部ファイルにしています 以下のように記述しましたが出来ませんでした html内のhead内に記述したもの <script type="text/javascript" src="test.js"></script> 外部ファイルの中身 function kakikae() { document.body.innerHTML = document.body.innerHTML.replace (/^あ*お$/g,'');focus(); }

  • excelにて数式の列のズレ方を任意でセルコピーするには?

    Excelにて、A1からA10までの10個のセルに入力されている 全ての関数式を1列ズラした形でコピーしたいのですが、 (例えば =AA1*AA2  →  =AB1*AB2 みたいな) コピーする位置は2つズレていてC列にコピーしたいのですが、 そこにコピーをすると  =AA1*AA2  →  AC1*AC2 となってしまいます。 これをコピーして、 例えのように1つだけしかズレないようにするには どうすればよいのでしょうか? もちろんコピーするときは、A1:A10までをドラッグして 一度にコピーしたい事が前提です。 良い方法があればお教え下さい。お願いします。

  • エクセルの文字列並べ替えについて

    エクセルの文字列並べ替えについて エクセル2000です。 半角文字列の数字とアルファベットを通常のエクセルの機能で昇順で並べ替えた場合 012 013 111 1AA 1B1 211 222 22C 23A 2AB 2BC のように並ぶと思います。(ここでの数字は数値でなく、すべて文字列です) 数字→アルファベットの順番のようです。 これを「アルファベット」→「数字」の順番で並べ替える方法はないでしょうか? 以下のような順にです。 ユーザー定義のリストに基づいた並べ替えがあることは存じていますが、3桁だけでも英数混在だと36×36×36=46,656個のリストを登録しなければならないことになり、現実的と思えません。 目的は、ホストコンピュータから出力される紙のデータがなぜかこのような順で出てきて、それにエクセルで作成したデータをあわせる必要が出てきたためです。 012 013 1AA 1B1 111 2AB 2BC 211 22C 222 23A エクセルの一般機能でもVBAでもかまいません。ご教示いただけると幸いです。

  • PHPの文字列変数をJavaScriptのalertで表示させたい

    <?php  $mes = 123; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> ↑のコードを実行すると123というメッセージボックスが表示されます。 <?php  $mes = "aaa"; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> しかしこのように数値変数でははく文字列変数を渡すと表示できません。 JavaScriptにPHPの文字列変数を受け渡すことはできるのでしょうか?

    • ベストアンサー
    • PHP
  • 自己結合について

    マスタA: |区分|KEY1|文字列| |E01|鈴木|AA| |E01|吉田|AB| |E01|迫田|AC| |E01|斉藤|AD| |E02|AA|主任| |E02|AB|新人| |E02|AC|派遣| Oracle9iにおいて上記の様なマスタAがあった場合に、 区分E01と区分E02を結合させて、 例えば"鈴木"を検索した際に"主任"という文字列を 取得できるなSQL文はどのようなりますでしょうか? この際、"斉藤"を検索した際には文字列はNullは空文字で表示したいです。 想定している検索結果以下の通りです。 |区分|KEY1|文字列|文字列| |E01|鈴木|AA|主任| |E01|吉田|AB|新人| |E01|迫田|AC|派遣| |E01|斉藤|AD|null| 思うような結果が出ず困っています。 どうぞよろしくお願いいたします。

専門家に質問してみよう