2011-11-17 3 views
-1

J'aijavascript supprimer les caractères

var content='<td> <table> <tr> <td> some_html_code </td> <td> another_html </td> </tr> </table> </td>'

Comment enlever <td> au début et à la fin </td>?

+2

En supposant que vous utilisez JavaScript sur le côté client, vous avez le DOM à votre disposition, ce qui signifie que cela peut se faire sans tripoter avec des chaînes HTML. D'où vient cette chaîne? Le document? - Si oui, utilisez le DOM pour référencer et récupérer le '

' ... – James

+0

Je répare ma question –

Répondre

1

Vous pouvez simpley slice() pour obtenir une copie d'une partie d'une chaîne.

var tmp_start_td = content.slice(5); 

    var tmp_end_td = tmp_start_td.slice(0,-6); 

    content = tmp_end_td; // result 
2

En supposant que la chaîne est tout ce que vous avez:

newcontent = content.substr(4,content.length-5); 

est la méthode la plus simple. Si vous essayez de sortir ceci d'un plus grand corps de HTML (une page entière?) Alors je suggérerais d'employer des opérations de DOM à la place.

4

Essayez:

content.replace(/^<td>\s?(.+)\s?<\/td>$/, "$1") 

Edit: ou similaire:

content.replace(/^<td>/, "").replace(/<\/td>$/, "") 
+0

Pourquoi? C'est complètement exagéré. –

+0

Chacun à son tour bien sûr, mais je pense que l'avantage de le faire est la lisibilité: il est assez évident ce que vous essayez de faire en un coup d'œil. J'ai ajouté une alternative, c'est peut-être un peu plus simple. –

+0

Une bonne réponse. :) –

1

Vous pouvez utiliser un analyseur XML ou des méthodes de manipulation DOM:

// Using DOM manipulation methods 
var myEl = document.createElement("tr"); 
myEl.innerHTML = "<td>\n"+ 
       " <table>\n" + 
       " <tr>\n" + 
       "  <td>\n" + 
       "   some_html_code\n" + 
       "  </td>\n" + 
       "  <td>\n" + 
       "   another_html\n" + 
       "  </td>\n" + 
       " </tr>\n" + 
       " </table>\n" + 
       "</td>"; 
var out = myEl.childNodes[0].innerHTML; 

console.log(out); 

L'un des avantages de l'utilisation des méthodes DOM ci-dessus est qu'ils peuvent être plus indulgent de validation/erreurs bien formedness ... mais en conséquence, ils pourraient ajouter un élément <tbody> au balisage.

Alternativement, vous pouvez également utiliser le moins pardonner DOMParser:

// using the DOMParser to parse XML 
var content = "<td>\n"+ 
       " <table>\n" + 
       " <tr>\n" + 
       "  <td>\n" + 
       "   some_html_code\n" + 
       "  </td>\n" + 
       "  <td>\n" + 
       "   another_html\n" + 
       "  </td>\n" + 
       " </tr>\n" + 
       " </table>\n" + 
       "</td>"; 
var parser=new DOMParser(); 
var serializer = new XMLSerializer(); 
xmlDoc=parser.parseFromString(content,"text/xml"); 

var out = ''; 
var tdEl = xmlDoc.childNodes[0]; 
var count = tdEl.childNodes.length; 
alert(count); 
for(var i=0; i<count; i++) { 
    out += serializer.serializeToString(tdEl.childNodes[i]); 
} 

console.log(out); 
Questions connexes