Как удалить тег из HTML с помощью JavaScript в iphone UIWebView - PullRequest
1 голос
/ 18 октября 2011

Ребята, у меня есть строка HTML, как показано ниже;

<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>

как можноудалить только тег?

1 Ответ

0 голосов
/ 18 октября 2011

Вы можете попробовать:

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 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();";

Edit:

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();";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...