1

codemirror と jquery を使用して、ブラウザーで xml エディターを「シミュレート」します。一部の xml タグには、2 つの可能な値 (true または false) を持つ「on」属性が含まれています。onclick イベントでこれらの値を切り替えることは可能でしょうか? codemirror/jquery プラグインは利用できますか?

編集 :

自己コード化されたソリューション。

function attrtoggle(){
    var pos = editor.getCursor();
    var line = editor.getLine(pos.line);
    var index = line.indexOf("on=");

    if(index > 0){
        //define range 
        if ( pos.ch -3 < index || pos.ch - 9 > index)
            return false;

        var len = 10;
        var replace_pos = index + 4;

        if(line.charAt(replace_pos) == "t"){
            //insert false
            line = line.replace('true', 'false');
        } else{
            //insert true
            line = line.replace('false', 'true');
        }
        edited = pos.line;
        editor.setLine(pos.line, line);
    }
}

onclick イベントのイベント ハンドラを追加するだけです。

$(".CodeMirror").attr("onclick","javascript:attrtoggle()");
4

1 に答える 1

0

完全ではありませんが (デザインが悪いなど)、期待どおりに動作します。

onclick イベントで関数をトリガーするだけです。

function attributeToggle(){

    var transitions = {
        "on": {
            "false":"true",
            "true":"false"
        }
    }


    var pos = editor.getCursor(); // object {line, ch}
    var token = editor.getTokenAt(pos);
    var line = editor.getLine(pos.line);

    try{

        var prev_pos = token.start - 1;
        var prev_token = editor.getTokenAt({'line':pos.line, 'ch':prev_pos});

        if(prev_token.className == "attribute")
            var attr = prev_token.string;
        else
            return false;

        if(typeof transitions[attr] === "undefined") //nothing to replace
            return false;

        var current_val = token.string.toLowerCase().replace(/(['"])/g, "");


        if(typeof transitions[attr][current_val] === "undefined")
            return false;

        var line_new =  line.substring(0, token.start) + \
 "\"" + transitions[attr][current_val] + "\"" +  line.substring(token.end);

        editor.setLine(pos.line, line_new);


    } catch (e){
        console.log(e);
    }
}
于 2012-08-28T08:07:29.043 に答える