我正在从应用程序接收HTML数据,但我需要更改一些节点以使其与新应用程序兼容,例如将<b>
更改为<strong>
。
我写了这个例子http://jsfiddle.net/daYL4/9/。
我想要做的是检查div
的所有节点,并在需要时进行转换,但它似乎无法正常工作。当我按下按钮时,只更改div
主要孩子。如果我再次按下按钮,则会改变孩子的孩子等。
我不明白为什么它不会在第一次点击时改变所有节点。
这就是我得到的:
<font>span
<b>bbb<i>iii</i>bbb<i>iii</i>bbb<i>i<font>font</font>ii</i></b>
</font>
按下按钮时,这就是我想要的:
<span>span
<strong>bbb<em>iii</em>bbb<em>iii</em>bbb<em>i<span>font</span>ii</em></strong>
</span>
有没有人有线索?
答案 0 :(得分:2)
这样的东西?
//create a jquery function for ease of operation.
$.fn.transform = function(replacer){
replacer = replacer || {};
this.find('*').each(function(){
var newNode = replacer[this.nodeName];
if(this.nodeType == 1 && newNode){//check for element node and if it is one in the replacement object
$(this).contents().unwrap().wrapAll(newNode); // take the contents out of the element unwrap it and then wrap all of the contents by creating a new object based on the replacement object value.
}
});
return this; //return for chaining
}
$(document).ready(function() {
$("button").click(function() {
//create an object with key value pair of replacement required
var repl = {
'B' :'<strong/>',
'I' : '<em/>',
'FONT': '<span/>'
}
$("div").transform(repl);
});
});
<强> Fiddle 强>