javascriptの質問です

http://jsfiddle.net/cw47p4um/6/
こちらのページなのですが 回答の行にマーカーを引く仕組みにしています
なぜか一問目のjavascriptが上手く動かず 問題文までマーカーが引かれてしまいます
なぜでしょうか?

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/10/23 03:56:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:takanii

申し訳ありません アドレスを貼り間違えました

こちらです

http://jsfiddle.net/cw47p4um/12/

ベストアンサー

id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154

ポイント250pt

一連の質問を考慮して、ちょっと書き直しました。
http://jsfiddle.net/b5cgdm3d/1/

考慮したのは、こんなところです。

  • 回答に、チェックボックスが付いて、LABEL で括られることがある
  • ボタンを押して、回答に色を付けたい

window.onload = function() {
    mark_answer();
}

function mark_answer() {
    var trs = document.getElementsByTagName("tr");
    for (var i = 0 ; i < trs.length ; ++i) {
        var ans = trs[i].children.item(5);
        re_ans = new RegExp("^[" + ans.innerHTML + "]");
        var ele_q = trs[i].children.item(2);
        walk_and_mark_answer(ele_q, re_ans);
    }
}

function walk_and_mark_answer(node, re) {
    var ele = node.firstChild;
    if (! ele) return;
    do {
        if (ele.nodeType == 3) {
            if (re_ans.exec(ele.nodeValue)) {
                var wrap = document.createElement("span")
                wrap.className = "answer_marker";           // ★目印
                ele.parentNode.insertBefore(wrap, ele);
                wrap.appendChild(ele);
                ele = wrap;
            }
        } else if (ele.nodeType == 1) {
            walk_and_mark_answer(ele, re);
        }
    } while (ele = ele.nextSibling);
}

ボタンを押して回答に色を付けたい場合には、関数 mark_answer() を、ボタンの click で呼び出してください。


因みに、http://jsfiddle.net/cw47p4um/12/ が、期待通りに動かなかった理由。

        var ans = trs[i].children.item(3);

これは、回答が TABLE の 4列目にあることを想定しています。
列が増えたので、回答を見失っていたのが、回答の色を付けられなかった、一番の理由です。

問題文に色が付いてしまっていたのは、色を付けるための目印にしていた変数のクリアができていなかったためです。
この回答で書き換えたコードでは、LABEL で括られた箇所も見るようにした過程で、色を付けるための目印にしていた変数も使わないように書き換えました。

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント250pt

最初のようになっていないからでしょう。

少し 変えてみました。

<body><table>
    
    <td>14<input type="checkbox" class="hikakubox"> </td>
       
    <td>48</td>
    <td>赤いのはどれか<BR><input type="checkbox">a りんご<BR><input type="checkbox">b みかん<BR><input type="checkbox">c たいや<BR><input type="checkbox">d なし<BR><input type="checkbox">e 黒</td><td>a</td><td></td><td></td><td></td></tr><tr><td>14<input type="checkbox" class="hikakubox"></td><td>49</td><td>黄色はどれか<BR><input type="checkbox">a ばなな<BR><input type="checkbox">b みかん<BR><input type="checkbox">c 銀色<BR><input type="checkbox">d みかん<BR><input type="checkbox">e 黒</td><td></td><td></td><td>a</td><td></td></tr>
</table></body>

二つ目のに 合わせる場合、タグを調整しないとダメでしょうね。

id:takanii

文字の改行の問題でしょうか?

2014/10/22 21:49:29
id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント250pt

一連の質問を考慮して、ちょっと書き直しました。
http://jsfiddle.net/b5cgdm3d/1/

考慮したのは、こんなところです。

  • 回答に、チェックボックスが付いて、LABEL で括られることがある
  • ボタンを押して、回答に色を付けたい

window.onload = function() {
    mark_answer();
}

function mark_answer() {
    var trs = document.getElementsByTagName("tr");
    for (var i = 0 ; i < trs.length ; ++i) {
        var ans = trs[i].children.item(5);
        re_ans = new RegExp("^[" + ans.innerHTML + "]");
        var ele_q = trs[i].children.item(2);
        walk_and_mark_answer(ele_q, re_ans);
    }
}

function walk_and_mark_answer(node, re) {
    var ele = node.firstChild;
    if (! ele) return;
    do {
        if (ele.nodeType == 3) {
            if (re_ans.exec(ele.nodeValue)) {
                var wrap = document.createElement("span")
                wrap.className = "answer_marker";           // ★目印
                ele.parentNode.insertBefore(wrap, ele);
                wrap.appendChild(ele);
                ele = wrap;
            }
        } else if (ele.nodeType == 1) {
            walk_and_mark_answer(ele, re);
        }
    } while (ele = ele.nextSibling);
}

ボタンを押して回答に色を付けたい場合には、関数 mark_answer() を、ボタンの click で呼び出してください。


因みに、http://jsfiddle.net/cw47p4um/12/ が、期待通りに動かなかった理由。

        var ans = trs[i].children.item(3);

これは、回答が TABLE の 4列目にあることを想定しています。
列が増えたので、回答を見失っていたのが、回答の色を付けられなかった、一番の理由です。

問題文に色が付いてしまっていたのは、色を付けるための目印にしていた変数のクリアができていなかったためです。
この回答で書き換えたコードでは、LABEL で括られた箇所も見るようにした過程で、色を付けるための目印にしていた変数も使わないように書き換えました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません