dynamisch Tags entfernen
Felix
- javascript
Hallo,
seit einer Weile zerbreche ich mir den Kopf über folgende Problemstellung und komme einfach auf keine zufriedenstellende Lösung:
Ich will mit dem IE in einem HTML-Editor Text markieren und bestimmte Tags innerhalb der Markierung entfernen können. Als Ansatz verwende ich das TextRange Objekt und prüfe mit inRange() ob sich ein Element innerhalb der Markierung befindet:
--------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>
Test
</title>
<script type="text/javascript">
function testSelection(){
var sel = document.selection;
if(sel.type.toLowerCase()=="text") {
var r1 = document.selection.createRange();
var parent = r1.parentElement();
// get all relevant elements
var children = extractElementNodes(parent);
var r2 = r1.duplicate();
for (var i = 0; i < children.length; i++) {
var child = children[i];
r2.moveToElementText(child);
if(r1.inRange(r2)) {
var tNode = document.createTextNode(child.innerHTML);
parent.replaceChild(tNode, child);
}
}
} else {
alert('not a text range');
}
}
function extractElementNodes(node, array) {
if (!array) {
var array = new Array();
}
if (node.hasChildNodes()) {
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType == 1) {
array.push(child);
}
extractElementNodes(child, array);
}
}
return array;
}
</script>
</head>
<body>
<b>
bold1
</b>
<ol>
<li>
li1
</li>
<li>
li2
</li>
</ol>
<b>
bold2
</b>
<form action="#">
<input type="button" value="zeigen" onmousedown="testSelection();" />
</form>
</body>
</html>
--------------------------------------------------------
Das seltsame ist nun, dass zwar das erste <b/> Element erkannt wird, wenn man es allein markiert, allerdings das letzte <b/> Element bei alleiniger Markierung ignoriert. Außerdem wird immer das zweite <li/> Element verschluckt. Hat jemand eine Lösung für dieses Problem, egal ob mit einem Range Objekt oder auf anderem Wege?
Wie anfangs gesagt sollen später nur bestimmte Tags entfernt werden, deshalb bring mir der removeFormat Befehl leider nichts.
Grüße
Felix