2011-06-21 11 views
5

Po kliknięciu linku "pokaż szczegóły" powinien on zostać zmieniony na "ukryj szczegóły". Próbowałem poniższy kod, ale to nie działa:Jak zmienić tekst wewnętrzny <a> przy użyciu javascript

out.print("<a href=\"javascript:parent.showHideDetails('"+id+"',this);\">show details</a>"); 

function showHideDetails(id,obj) { 
    try 
    { 

     alert(obj.innerText); 
     obj.innerText = 'hide details'; 
    } 
    catch (err) 
    { 
     alert(err); 
    } 

} 

Odpowiedz

6

Problemem jest to, że this w atrybucie href nie wskazuje na kotwicy. Możesz przekazać tam identyfikator i nadać elementowi kotwiącemu ten sam identyfikator, co atrybut id; a następnie użyj document.getElementById, aby uzyskać zakotwiczenie.

przykład:

out.print("<a href=\"javascript:parent.showHideDetails('"+id+"','anchor_1');\" id=\"anchor_1\">show details</a>"); 

function showHideDetails(id,identifier) { 
    try 
    { 
     var obj = document.getElementById(identifier); 
     alert(obj.innerText); 
     obj.innerText = 'hide details'; 
    } 
    catch (err) 
    { 
     alert(err); 
    } 
} 
1

innerText jest jedną z tych przeglądarek wybrednych te, które są nazwane różnie w różnych przeglądarkach. Jeśli dopiero zaczynasz z javascript polecam za pomocą ramy jak jQuery bo to znacznie prostsze do wywołania funkcji, takich jak:

$('#linkID').text('show'); 

niż jest, aby każdy wariant przeglądarki prawidłowo ustawiony. Ramy to wszystko dla ciebie.

+0

+1 Ta odpowiedź jest właściwa. – zawhtut

2

Szczegóły podane w pytaniu są nieliczne. Oto kilka możliwości:

Usuń parent. z obsługi inline i zmień go do onclick:

"<a href=\"#\" onclick=\"javascript:showHideDetails('"+id+"',this);\">show details</a>" 

Być może funkcja showHideDetails() nie jest globalne

Może innerText nie jest obsługiwany przeglądarka, której używasz. Zamiast tego spróbuj innerHTML.

obj.innerHTML = 'hide details'; 
+0

@downvoter: Podaj powód głosowania w dół, jeśli jesteś w stanie. – user113716

0

this wskaże DOM oknie, a nie znaczników <a>. Użyj więc atrybutu onclick, aby wykonać.

out.print("<a href=\"#\" onclick=\"showHideDetails('"+id+"',this);\"> 
show details</a>"); 
Powiązane problemy