Node[removed]小写给予标签名称(Node[removed] giving tag nam

2019-08-31 11:10发布

我循环节点列表获取节点的数据,但在使用Node.innerHTML我得到小写字母的标记名称。

实际标签

<Panel><Label>test</Label></Panel>

作为给予

<panel><label>test</label></panel>

我需要这些标签,因为它是。 是否有可能用正则表达式来得到它? 我使用它与道场(有没有在道场什么办法?)。

var xhrArgs = {
            url: "./user/"+Runtime.userName+"/ws/workspace/"+Workbench.getProject()+"/lib/custom/"+(first.type).replace(".","/")+".html",
            content: {},
            sync:true,
            load: function(data){
                var test = domConstruct.toDom(data);
                dojo.forEach(dojo.query("[id]",test),function(node){
                    domAttr.remove(node,"id");
                });
                var childEle = "";
                dojo.forEach(test.childNodes,function(node){
                    if(node.innerHTML){
                            childEle+=node.innerHTML;
                    }
                });
                command.add(new ModifyCommand(newWidget,{},childEle,context));
            }
    };

Answer 1:

你不能指望.innerHTML保留你原来的HTML的确切性质。 事实上,在某些浏览器,这是显著不同(虽然产生相同的结果)不同的报价,情况下,属性的顺序,等等。

这是好多了不依赖情况下的保护和调整你的JavaScript来处理不确定的情况下。

这当然是可以使用正则表达式做一个不区分大小写(“我”标志指定的搜索不区分大小写),虽然普遍好得多使用直接访问DOM /搜索,而不是innerHTML的搜索。 你得告诉我们更多关于你正在试图做之前,我们可以提供一些代码到底是什么。



Answer 2:

这将需要我有点明白这一点与正则表达式,但你可以这样做:

    var str = '<panel><label>test</label></panel>';
    chars = str.split("");
    for (var i = 0; i < chars.length; i++) {
        if (chars[i] === '<' || chars[i] === '/') {
           chars[i + 1] = chars[i + 1].toUpperCase();
        }
    }
    str = chars.join("");

的jsfiddle

我希望它能帮助。



Answer 3:

如果你想利用刚标记名称的第一个字符,你可以使用:

var s = 'panel';
s.replace(/(^.)(.*)/,function(m, a, b){return a.toUpperCase() + b.toLowerCase()}); // Panel

或者您可以使用字符串操作(可能不止一个正则表达式有效):

s.charAt(0).toUpperCase() + s.substring(1).toLowerCase(); // Panel

上述将输出任何输入字符串与在上壳体和其他一切小写的第一个字符。



Answer 4:

这不是彻底的测试,并且是高度inefficcient,但它在控制台相当快的工作:(也,这是jQuery的,但它可以被转换成纯JavaScript / DOM容易)

在的jsfiddle

function  tagString (element) {
    return $(element).
            clone().
            contents().
            remove().
            end()[0].
            outerHTML.
            replace(/(^<\s*\w)|(<\/\s*\w(?=\w*\s*>$))/g,
                    function (a) {
                        return a.
                               toUpperCase();
                    }).
            split(/(?=<\/\s*\w*\s*>$)/);
}

function capContents (element) {
    return $(element).
            contents().
            map(function () { 
                   return this.nodeType === 3 ? $(this).text() : capitalizeHTML(this);
            })
}

function capitalizeHTML (selector) {
    var e = $(selector).first();
    var wrap = tagString(e);
    return wrap[0] + capContents(e).toArray().join("") + wrap[1];
}

capitalizeHTML('body');

同时,除了是一个很好的锻炼(在我看来),你真的需要做到这一点?



文章来源: Node.innerHTML giving tag names in lower case