Verwenden von innerHTML.ersetzen zum ersetzen von text auf Verknüpfung erstellen
Bin ich mit Sharepoint (WSS 3.0), die ist leider sehr beschränkt in seiner Fähigkeit zum format Fragen (d.h., es entfernt alle HTML, die Sie eingeben). Ich sah die Lösung anderswo vorgeschlagen, dass wir hinzufügen, dass einige JS auf unsere master-Seite Datei, um die Zeilenumbrüche zu. Das funktioniert wunderbar, aber ich würde gerne sehen, wenn wir können damit auch links.
In unserem WSS-Umfragen kann ich nun verwenden {{br}} überall, ich will einen Zeilenumbruch (das funktioniert). Ich habe versucht, die Ausweitung des code zu ermöglichen, die Verwendung von link-tags (z.B. {{link1}}url{{link2}}URL-Title{{link3}}, aber das funktioniert nicht, vermutlich, weil die updates nicht geschehen, als ganze, und der browser dann versucht zu machen, es Stück für Stück, verwirrend. (FF und IE zeigen verschiedene Ergebnisse, aber beide scheitern. Wenn ich mischen, bis die Reihenfolge der JS-unten -- also, tun link3, 2 und dann 1 -- der Ausgang sich ändert, aber immer noch nicht.) Gibt es einen besseren Weg, dies zu tun?
<script language="JavaScript">
var className;
className = 'ms-formlabel';
var elements = new Array();
var elements = document.getElementsByTagName('td');
for (var e = 0; e < elements.length; e++)
{
if (elements[e].className == className){
elements[e].innerHTML = elements[e].innerHTML.replace(/{{br}}/g,'<br/>');
elements[e].innerHTML = elements[e].innerHTML.replace(/{{link1}}/g,'<a href="');
elements[e].innerHTML = elements[e].innerHTML.replace(/{{link2}}/g,'">');
elements[e].innerHTML = elements[e].innerHTML.replace(/{{link3}}/g,'</a>');}
}
</script>
InformationsquelleAutor Mark | 2009-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt einer änderung der innerHTML-Eigenschaft in Blöcken (der browser versucht ein update der DOM jedes mal, wenn Sie ändern, innerHTML, die, wenn Sie unvollständige/kaputte markup, wird offensichtlich Durcheinander zu bringen), gehen alle Ihre Modifikationen, die gegen Ihre eigenen string-variable, und überschreiben Sie dann die gesamte innerHTML mit Ihr abgeschlossen string:
innerHTML ist im wesentlichen nichts anderes als ein string, also alles, was Sie tun, mit newHTML ist die Manipulation einer Zeichenkette. Es ist nur geparst und in den DOM, sobald Sie manipulieren das element ist innerHTML.
Okay, ich glaube, ich verstehe zumindest auf einem hohen Niveau. (Und danke an alle für Eure schnellen Antworten.) Wenn ich im code oben/unten, Ende ich mit einer Handvoll "undefined" text-Teile, die alle über mein WSS-Seiten (alle Seiten, nicht nur diejenigen, die mit {{link}} - tags). Es scheint etwas zu tun mit 'var newHTML = elements[e].innerHTML;', als wenn ich den Kommentar, dass der line-out der Fehler Weg (aber natürlich nichts wird dann ersetzt). Irgendwelche Ideen?
mein code und der code tut genau das gleiche. In diesem besonderen Beispiel, sollten Sie nicht brauchen, um etwas ziehen, von überall aus, vorausgesetzt, Sie schreiben Ihre Token, so dass {{link1}} und {{link2}} immer wickeln Sie die URL. Es wird nicht mehr stabile Fälle, wie @Daniel das zweite Beispiel, aber es wird den job zu erledigen.
Sie sollten überprüfen, um zu sehen, dass die Elemente[e] tatsächlich vorhanden ist und Kinder hat, bevor Sie versuchen, etwas zu tun.
InformationsquelleAutor Rex M
Die einfache Antwort wäre der Aufbau der innerHTML-und ersetzen Sie es alle auf einmal:
Die komplexere Antwort würde die Aufnahme der Gruppen in der regex und übergeben Sie einer Funktion als 2. parameter replace(), um einen einzelnen Aufruf zu ersetzen, () für den HTML-Code. Zum Beispiel,
Die zweite Lösung ist komplizierter und führt zu einigen hässlichen regexes, aber effizienter ist, als das aufrufen von replace() immer und immer wieder.
Art, ich habe die einfache Antwort war dann auf die komplexere Antwort in der Zwischenzeit.
InformationsquelleAutor Daniel Lew