2011-04-06 11 views
8

Wygląda na to, że JavaScript automatycznie konwertuje określone znaki specjalne na elementy HTML podczas wysyłania treści za pomocą funkcji innerHTML(). Jest to problem, ponieważ muszę mieć możliwość wyprowadzenia < i> bez konwersji do gt; i lt;Javascript - używanie innerHTML do wyprowadzania łańcuchów znaków * BEZ * znaków specjalnych kodowanych w HTML?

Czy można zapobiec automatycznej konwersji, odwrócić ją lub uciekać? Do tej pory, niezależnie od tego, co robię, < i> zawsze są automatycznie kodowane do elementów HTML.

Przykładowy kod:

function DisplayQueries() { 
    var IDs = ['AllOpenedINC','AllOpenedCRQ','AllClosedINC','AllClosedCRQ','SameDayINC','SameDayCRQ','NotSameDayINC','NotSameDayCRQ', 
     'StillOpenINC','StillOpenCRQ','OpenOldINC','OpenOldCRQ','OtherQueuesINC','OtherQueuesCRQ'] 

    for (var i = 0; i < IDs.length; i++) { 
     if (eval(IDs[i])) 
      document.getElementById(IDs[i]).innerHTML = eval(IDs[i]); 
    } 
} 

Przykład zmienna zapytania:

AllOpenedINC = "('Company*+' = \"test\" OR 'Summary*' = \"%test%\") AND ('Submit Date' >= \"" + theDate + 
    " 12:00:00 AM\" AND 'Submit Date' <= \"" + theDate + " 11:59:59 PM\")" + nameINC; 
+0

można zakładać przykładowy kod (i powiedz nam jakiej przeglądarki używasz go)? –

+0

Czy chcesz wstawić znaczniki (XML jakiegoś rodzaju), to możesz użyć .appendChild ("") ;, ale mam wrażenie, że nie jest to, czego chcesz? – Guidhouse

+0

Więcej informacji o tym, co to jest, co chcesz osiągnąć, proszę – Guidhouse

Odpowiedz

0

Wyjaśniałem, co się dzieje. Nie ma łatwego sposobu na uniknięcie konwersji znaków specjalnych na elementy HTML przez innerHTML, ale ponieważ problem pojawiał się podczas kopiowania zawartości DIV do schowka (przy użyciu JS tylko JS, który działa, ponieważ znajduje się w środowisku rządowym, w którym wszyscy mają używać IE), użyłem tylko funkcji replace(), aby ponownie przekonwertować elementy HTML z powrotem na < i>.

+0

Tak, innerHTML naprawdę niczego nie konwertuje. W moim przypadku było to wymuszanie szablonów na wąsy. –

1

myślę, że pytanie jest oparty na błędnych przesłankach. Wystarczy dokonać bardzo prosty test:

document.getElementById("testdiv").innerHTML = '<h1><em>Hello</em></h1>'; 

jeśli to działa prawidłowo, to problem nie jest po stronie JS, zamiast korzystania z niektórych innych komponentów w systemie, który HTML zakodować swoje postacie.

+0

Cóż, nawet jeśli robię document.getElementById ("testdiv"). InnerHTML = '< test >'; nadal koduje < and > jako encje HTML. Wygląda na to, że pomija tylko te dla rzeczywistych tagów HTMl, może ..? – ClairelyClaire

+0

@shifuimam Jest możliwe, że twój ciąg jest przekazywany bezpośrednio do parsera HTML, a znaki, które nie zostaną zinterpretowane jako legalny HTML, zostaną przekonwertowane. - To jest tylko problem, jeśli chcesz wstawić uszkodzony dokument do dokumentu. Czy mogę zapytać, jaki jest twój cel? Może możemy zaproponować inne rozwiązania. - Możesz dodać to do swojego pierwszego pytania. – vbence

+0

Dodałem przykład tekstu, który wypisuję na moje oryginalne pytanie. Tekst jest zapytaniem, które używa operandów takich jak <= and > = ... to symbole, które automatycznie się konwertują na encje. – ClairelyClaire

1

Powinieneś skupić się na tym, co chcesz osiągnąć, a nie na sposobie, w jaki to robisz. innerHTML() również koduje, innerText() i textContent() również kodują. Powinieneś więc rozszyfrować łańcuchy, jeśli chcesz je jako < lub> wstecz.

Możesz użyć tej funkcji unescapeHTML(), aby uzyskać wyniki, które chcesz.

Mam nadzieję, że to pomoże. Skopiowałem to z Prototypu.

+0

Naprawdę, naprawdę nie chcę używać struktury JS tylko dla jednej funkcji. Czy istnieje funkcja ręczna, która wykonuje funkcję stripTags()? – ClairelyClaire

+0

Nie musisz korzystać z frameworka. Możesz po prostu użyć tej funkcji bez korzystania z frameworka. Skopiowałem to z ram dla ciebie. Umieść go wewnątrz swoich znaczników . – celiker