CodeMirror XML模式:读取所有属性

时间:2016-02-10 08:33:58

标签: xml codemirror

在XML模式下运行的CodeMirror有一种方法可以读取光标位置处标记的所有属性吗?

光标处的标记可以通过

确定

var cur = cm.getCursor(), token = cm.getTokenAt(cur);

实施例: 陈述&#34; <mytag id="1" name="Test"/>&#34;可能导致这个:

{ id: "1", name: "Test" }

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

这可能对某人有帮助!

cm.on("cursorActivity", function () {
    var cur = cm.getCursor(),
        tagList = [
            "control",
            "fql",
            "text"
        ],
        range = cm.getViewport(),
        attributes = {};

    range.from = Math.min(range.from, cur.line);
    range.to = Math.max(cur.line + 1, range.to);

    var match = CodeMirror.findMatchingTag(cm, cur, range);

    if (match && match.at === "open" && tagList.indexOf(match.open.tag.toLowerCase()) > -1) {
        var doc = cm.getDoc(),
            tagLine = doc.getRange(match.open.from, match.open.to, false).join(""),
            re = /(\S+)\s*?=\s*(['"])(.*?|)\2/g,
            m;

        while ((m = re.exec(tagLine)) !== null) {
            if (m.index === re.lastIndex) {
                re.lastIndex++;
            }

            attributes[m[1]] = m[3];
        }

        console.log(attributes);
    }
});