JS属性值onclick替换

时间:2012-07-30 15:42:34

标签: javascript jquery onclick codemirror

我使用codemirror和jquery在浏览器中“模拟”xml编辑器。一些xml-Tags包含一个带有两个可能值(true或false)的“on”-attribute。是否可以在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()");

1 个答案:

答案 0 :(得分: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);
    }
}