Как удалить тег из html с помощью JavaScript в iphone UIWebView

#javascript #html #tags

#javascript #HTML #Теги

Вопрос:

Ребята, у меня есть строка 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:

Вы могли бы попробовать:

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

Редактировать:

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

Комментарии:

1. это будет работать в e-reader для записи примечания к выделенному тексту .. и, если я не смогу удалить добавленный мной тег, будет много <span> тегов.. мне нужно больше, чтобы полностью удалить известный тег

2. Если вам действительно нужно удалить теги, у меня будет новая версия кода. Вы могли бы взглянуть, если вам это нужно.

3. Здесь я пытаюсь создать выделение текста и извлекать выделенный текст, когда когда-либо закрываю и открываю книгу. Я буквально выделил текст, но я не знаю, как его сохранить и извлечь. Не могли бы вы мне помочь, пожалуйста