我正在迭代 NodeList 以获取节点数据,但在使用 Node.innerHTML 时,我得到小写的标记名称。
实际标记
<Panel><Label>test</Label></Panel>
给予
<panel><label>test</label></panel>
我需要这些标签。是否有可能通过正则表达式得到它?我在dojo中使用它(在dojo中有什么办法吗?)。
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));
}
};
答案 0 :(得分:4)
您不能指望.innerHTML
保留原始HTML的确切性质。事实上,在某些浏览器中,它与不同的引用,大小写,属性顺序等有显着差异(虽然生成相同的结果)......
最好不要依赖保存案例并调整你的javascript来处理不确定的案例。
当然可以使用正则表达式进行不区分大小写的搜索(“i”标志将其搜索指定为不区分大小写),尽管使用直接DOM访问/搜索而不是innerHTML通常要好得多。搜索。在我们提供一些代码之前,您必须告诉我们更多关于您正在尝试做什么的事情。
答案 1 :(得分:0)
我需要用正则表达式来解决这个问题,但你可以使用它:
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("");
我希望它有所帮助。
答案 2 :(得分:0)
如果您尝试将标记名称的第一个字符大写,则可以使用:
var s = 'panel';
s.replace(/(^.)(.*)/,function(m, a, b){return a.toUpperCase() + b.toLowerCase()}); // Panel
或者你可以使用字符串操作(可能比正则表达式更有效):
s.charAt(0).toUpperCase() + s.substring(1).toLowerCase(); // Panel
上面将输出任何输入字符串,其中第一个字符为大写,其他所有字符为小写。
答案 3 :(得分:0)
这没有经过全面测试,并且效率很低,但它在控制台中运行得非常快: (也是,它是jquery,但它可以很容易地转换为纯javascript / DOM)
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');
另外,除了是一个很好的练习(在我看来),你真的需要这样做吗?