• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:replaceによる置換がうまくいかない)

Javascriptのreplaceメソッドで複数のタグ内のテキストを一括置換する方法

このQ&Aのポイント
  • Javascriptのreplaceメソッドを使用して、複数のタグ内のテキストを一括で置換する方法を教えてください。
  • テキストの一部が異なるタグ内の複数の要素を、それぞれの部分ごとに置換する方法を知りたいです。
  • 現在、全てのタグ内のテキストが同じように置換されてしまいます。それぞれのタグ内のテキストを個別に置換する方法を教えてください。

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

  • ベストアンサー
  • Chaire
  • ベストアンサー率60% (79/130)
回答No.3

getElementById を使いたいなら、 <!DOCTYPE data [  <!ELEMENT data ANY>  <!ATTLIST data id ID #IMPLIED> ]> で id 属性を ID 型として宣言しなければなりません。 ※ DOM Level 1 の getElementById は HTML モジュールのメソッドなので、HTML では id という名前の属性が ID 型であると知っています。しかし、DOM Level 2 からは HTML に限らない Core モジュールに移動になりましたので、何が ID 型の属性であるかを教えてやらねばなりません。MSXML の nodeFromID も同様です。 ※ text/html、application/xhtml+xml ならば実装が (X)HTML のスキーマを知っているはずですから、無条件で getElementById を使えるように見えます(実際、HTML5 はそう規定しています)。しかし、application/xml(特に混合文書)の場合の保証はありません。それゆえ、スキーマなしで ID を扱える xml:id 規定が作られましたが、それはそれで問題が生じています。 ---- とにかく、スキーマ不在の XML 処理に Core メソッドでちまちまやるのも何ですので、Firefox 前提なら(多少使いにくいですが)XPath の方がまだ確実です。名前空間には十分に注意を払って下さい。 <xh:script type="application/javascript; version=1.6" xmlns:xh="http://www.w3.org/1999/xhtml"> var r = document.evaluate('/child::data/child::item[@list]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var I = r.snapshotLength; var i; var n; var f = function(v, i) { this.setAttribute('list' + (i + 1), v); }; for (i = 0; I > i; i++) {  n = r.snapshotItem(i);  n.getAttribute('list').split(/\s*,\s*/).forEach(f, n);  n.removeAttribute('list'); } </xh:script> なお、属性に順序はありませんので、list1、list2、……と連番にしても、人間が読みやすい以上の意味はありませんし、期待通りに処理できるとも限りません。データにリスト以上の構造を持たせるならば、属性ではなく要素にすべきです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

これはどのレベルのXMLを宣言しているのでしょうか? firefox3であればモダンブラウザのたいていの機能は包含しているはずですが・・・ もしくはなにか特殊なOSや環境?

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じじゃないですか? <script> window.onload=function(){ var n=document.getElementById("hoge").getElementsByTagName("item"); for(var i=0;i<n.length;i++){ var l=n[i].getAttribute("list").split(","); for(var j=0;j<l.length;j++){ n[i].setAttribute("list"+(j+1).toString(),l[j]); } n[i].removeAttribute("list"); } } </script> <data id="hoge"> <item list="りんご,みかん,なし">果物</item> <item list="あじ,さんま,まぐろ">魚類</item> <item list="とり,ぶた,うし">肉類</item> </data>

hiro_n19
質問者

補足

ご回答をいただき有難うございます。 上記の方法も試してみましたが、getElementByIdとgetElementsByTagNameの部分で「getElementById is not a function」のエラーが出てしまいます。 ブラウザはFirefox3.0.9です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 秀丸でまとめて置換

    いつもお世話になっています。 下記のようなリストがあります。 list.Add リンゴ みかん ブドウ list2.Add リンゴ みかん ブドウ list3.Add リンゴ みかん ブドウ list4.Add リンゴ みかん ブドウ list5.Add リンゴ みかん ブドウ list.Add~list5.Add(実際には5よりもっとあります) これをまとめて置換で取っ払いたいんですが方法はあるでしょうか?

  • 文字列変換(置換)方法について

    Selection.Replace を利用して単体の文字を置換することはできるのですが、 例えば とあるセルに りんご+みかん+めろん っていう文字列が入力されていた場合、 Selection.Replace what:="りんご" , replacement:="" をすることによって、結果、 +みかん+めろん にすることはできますが、 ++だけにするようにはできませんでしょうか。 りんご+みかん+めろん+なし+・・・・・っと 20パターンぐらいあるので、 Selection.Replace では難しいのではと思っております。 該当の文字列だけ消す処理をしたいです。 すいませんがお願いします

  • エクセルの関数について何を使えば良いか教えてください。

    さんま・あじ・まぐろ・さんま・たい・ぶり・あじ・とろ・たまご・まぐろ 上記のようにランダムにならんでいるリストがあり、これをどの項目がいくつあると言う事がわかり、さらに順位をつけれる関数または、方法を教えていただきたいのですが? 近い方法でもいいです。例えば順位だけ出せるなど・・・ 宜しくお願いします。

  • Replace関数は文字数の制限あるのでしょうか?

    アクセス2003のVBAでReplace関数で置換元のデータが大きい場合以下のエラーになります。アクセスのVBAはVB6と同じ?だと思いますが サイズの制限が存在するのでしょうか? 対策もあれば教えて欲しいです。 dim str_express as string <-- ここにアクセスのTEXT型のデータを入れている modori = Replace(str_express, str_find, str_replace) 実行時エラー'-2147352567(80020009)' 指定されたデータ量がフィールドサイズを超えています。 データ量を減らし、挿入または貼り付けを行ってください。

  • 文字列の置換

    AファイルのA1セルからBファイルのC1セルにデータを反映させたとします。 その際に以下のように文字列を複数置換させたいのです。 A1セル   C1セル りんご → みかん みかん → ぶどう なし  → 空欄 空欄  → 空欄 上記のようにセルのデータを複数置換することはできるのでしょうか? 又、置換できるならどの関数を使えばよいのでしょうか?

  • ある文字について、異なった列の特定行への一括置換

    以下の表があったとします。置換前の表中の×を各列の最後の文字に置き換えたいです。たとえば、A4の×は野菜、B2とB4の×は肉、など。実際には膨大なデータがありますので、一括で処理する方法をご教示いただけますと幸いです。よろしくお願いいたします。 【置換前の表】   A    B    C    D 1 りんご みかん ぶどう なし 2 みかん ×   ×    みかん 3 みかん ぶどう ×    × 4 ×    ×   ×    × 5 ぶどう なし   りんご  りんご 6 ぶどう みかん なし   なし 7 野菜   肉   穀物   魚 【置換後の表】   A    B     C    D 1 りんご みかん ぶどう なし 2 みかん 肉   穀物   みかん 3 みかん ぶどう 穀物   魚 4 野菜  肉    穀物   魚 5 ぶどう なし   りんご  りんご 6 ぶどう みかん なし   なし 7 野菜  肉    穀物   魚

  • エクセルで個数を数える、グラフにする

    エクセルで以下のようなデータがあるとします。 商品名 個数 りんご 5 みかん 3 メロン 2 いちご 1 パイナップル 2 すいか 3 マンゴー 5 とこれらのデータを 個数 果物の種類 1 1 2 2 3 2 4 0 5 2 のようなデータに変換したいと思っています。 どのようにすればよいでしょうか? グラフにもしたいと思っています。 ちなみに、 実際には100行ぐらいのデータが存在し、 商品名 個数 商品名 個数 りんご 3  さんま  2 みかん 5  あじ   4 のように横にも他のデータが存在しています。 (魚のデータも果物と同じような処理をしたいです)

  • PHPでHTMLファイル置換 プログラムについて

    以下のプログラムを書きました。 あるHTMLファイルをテンプレートとし、 中に記述している置換文字列を動的に 表示させるというものです。 しかしなかなか表示されません。 どこがおかしいのでしょうか? --template.html-- <html><head><title>test</title></head> <body> 表題 他いろいろ <!-- data replace --> フッター いろいろ </body></html> --index.php-- $page_lines = File("template.html"); $all_lines=''; foreach( $page_lines as $line ){  $all_lines .= $line; } $str = "<div>出力用データいろいろ</div>"; print preg_replace(/<!-- data replace -->/,$str, $all_lines); 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • リストボックス 複数選択のデータ受け渡し

    教えてください。PHP初心者です。 リストボックスを下記のように設置し、そこから別ファイルにデータの受け渡しをしたいのですが、どうしても上手く行きません。 データを受け継いだのち、複数の項目(さんまetc)を分別させるようにしたいです。 ========form.html============ <FORM method="POST" action="./get_data.php"> <SELECT size="15" name="list" multiple> <OPTION value="1">さんま</OPTION> <OPTION value="2">あじ</OPTION> <OPTION value="3">いか</OPTION> <OPTION value="4">かつお</OPTION> </SELECT> <INPUT type="submit" value=" 送信する "> </FORM> =========================================== ===========get_data.php==================== $LIST = array($_POST['list']); この後が分かりません。一応 foreach($LIST as $renew_list){ print "$renew_list\n"; print "<BR>\n"; } =========================================== 上記でやると、複数選択で選んだもの(例えば、さんまとあじ)の場合、 あじだけが表示されて、さんまは消えてしまいます。 どなたか助けてください。

    • ベストアンサー
    • PHP
  • Excelで置換した文字に色をつけたい

    よろしくお願いします Excelで、「対象シート」のB列を参照して、 「置換リスト」シートの一覧のC列の文字列をE列の文字列に置換するようにしています。 「対象シート」のA列には置換前のデータも入っているので、 「対象シート」のA列、B列それぞれの置換前、置換後の文字列に色をつけたいと思っています。 どの文字がどの文字に置換されたかを比較するためです。 置換後のB列のみ下記式で色をつけられたのですが、 該当文字が含まれる、セル内全部の文字の色が変わってしまいました。 該当文字だけの色を変えるにはどうすればよいでしょうか。 また、「置換リスト」シートのC列にある場は「対象シート」のA列の該当文字のみを赤くする方法も教えていただけないでしょうか。 Sub list置換_Click() Dim list_sheet As Worksheet Dim chg_sheet As Worksheet 'こっちは置換する元の文字と置換文字のリスト Set list_sheet = Worksheets("置換リスト") 'こっちは一括置換したい対象のシート Set chg_sheet = Worksheets("対象シート") cnt = list_sheet.Range("c4").CurrentRegion.Rows.Count For i = 4 To cnt srcword = list_sheet.Cells(i, "C").Value repword = list_sheet.Cells(i, "E").Value With Application.ReplaceFormat.Font .Subscript = False .Color = 255 .TintAndShade = 0 End With Columns("B:B").Replace What:=srcword, Replacement:=repword, LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=True Next i End Sub よろしくお願いいたします。