2011-10-18 12 views
1

みんな私は以下のようなHTML文字列を持っています。iphoneでJavaScriptを使用してHTMLからタグを削除するにはUIWebView

<html> 
    <head><title></title></head> 
    <body>i wanna remove <span name="Note">this</span> tag</body> 
</html> 

私はこのJavaScriptコードを使用します

NSString *str = @"function f(){ 
    var nodes = document.getElementsByName('Note'); 
    alert(nodes.length); // it returns node count correctly 
    for(var i = nodes.length - 1;i >= 0;i--){ 
     var node = nodes[i]; 
     if (node){ 
     node.parentNode.removeChild(node); 
     } 
    } 
}f();"; 

[UIWebView stringByEvaluatingJavaScriptFromString:str]; 

を結果は次のとおりです。

<html> 
    <head><title></title></head> 
    <body>i wanna remove tag</body> 
</html> 

どのように私はタグのみを削除することができますか?

答えて

0

あなたは試みることができる:

NSString *str = @"function f(){ 
    var doc = document; 
    var nodes = doc.getElementsByClassName('Note'); 
    alert(nodes.length); // it returns node count correctly 
    for(var i = nodes.length - 1;i >= 0;i--){ 
     var node = nodes[i]; 
     if (node){ 
     //node.parentNode.removeChild(node); 
     node.className = ''; 
     } 
    } 
}f();"; 

編集:

NSString *str = @"function f(){ 
    var doc = document; 
    var nodes = doc.getElementsByClassName('Note'); 
    alert(nodes.length); // it returns node count correctly 
    for(var i = nodes.length - 1;i >= 0;i--){ 
     var node = nodes[i]; 
     if (node){ 
     //node.parentNode.removeChild(node); 
     node.parentNode.replaceChild(doc.createTextNode(node.innerHTML), node); 
     } 
    } 
}f();"; 

をしかし、クラスを削除する場合は、<span class="Note">foo<span>bar</span></span>ようなタグを入れ子になってしまった場合、これは奇妙な結果を引き起こしますあなたはこのような何かを行うことができ、十分推測されます:

NSString *str = @"function f(){ 
    var doc = document; 
    var aux = doc.createElement('span'); 
    //alert(nodes.length); // it returns node count correctly 
    for(var nodes = doc.getElementsByClassName('Note'); nodes && (nodes.length > 0); doc.getElementsByClassName('Note')){ 
     var node = nodes[0]; 
     if (node){ 
     aux.innerHTML = node.innerHTML; 
     for (var el = aux.firstChild, next = el.nextSibling; el; el = next, next = next ? next.nextSibling : null){ 
      var tmp = node.parentNode.insertBefore(el, node); 
     } 
     node.parentNode.removeChild(node); 
     } 
    } 
}f();"; 
+0

これは、選択されたテキストへの書き込みメモの電子リーダーで動作します。 と、私が追加したタグを取り除くことができなかった場合は、「」タグがたくさんあります。既知のタグを完全に削除する必要があります。 – relower

+0

最終的にこれは私のために働きます。 – relower

+1

本当にタグを削除する必要がある場合は、新しいバージョンのコードを用意します。あなたはそれが必要かどうかを見ることができます。 – Prusse

関連する問題