2011-05-27 9 views
23

Mam element takiego:jQuery - ustawienie tekst danego elementu tylko bez zdejmowania innego elementu (anchor)

<td> 
    <a>anchor</a> 
    [ some text ] 
</td> 

i trzeba ustawić to tekst w jQuery, bez usuwania kotwicy.

Zawartość elementu może się różnić w kolejności (tekst przed lub po), a rzeczywisty tekst jest nieznany.

Dzięki

Nowa aktualizacja

To co wymyśliłem użyciu zakłada tylko pojedynczego węzła tekstowego:

function setTextContents($elem, text) { 
     $elem.contents().filter(function() { 
      if (this.nodeType == Node.TEXT_NODE) { 
       this.nodeValue = text; 
      } 
     }); 
    } 

    setTextContents($('td'), "new text"); 
+2

Czy potrafisz określić, czy zawartość będzie przed '' anchorem' czy po 'javascript '? Jeśli tak, to możesz ustawić zmienną 'prepend()' lub 'append()' na podstawie twojego przypadku. –

+0

Całkiem skomplikowany. Czy nie ma możliwości włączenia tekstu w zakres? – GolezTrol

+0

Nie jestem pewien, czy rozumiem twoje pytanie, ale możesz wybrać znacznik zakotwiczenia i użyć .after() lub .before() –

Odpowiedz

31

Neal's answer to moja propozycja. jQuery nie ma możliwości wybrania węzłów tekstowych How do I select text nodes with jQuery?.

Zmiana struktury HTML spowoduje utworzenie najprostszego kodu. Jeśli nie można tego zrobić, możesz po prostu użyć właściwości childNodes szuka węzłów typu 3 (TEXT_NODE) ​​

Oto niektóre przykładowy kod, który zakłada, że ​​ostatni węzeł jest węzłem, który chcesz edytować

http://jsfiddle.net/mendesjuan/B7rKs/

<div class='someClass'> 
    <a>anchor</a> 
    [ some text ] 
</div> 

<button id='btn'> Change text </button> 

$('#btn').click(function(){ 
    $('.someClass').get(0).lastChild.nodeValue = "New Value" 
}); 
+0

Wielkie dzięki za powiązanie. –

+0

O rany, to jest podstępne! Uwielbiam to :) – Nippysaurus

4

Jeśli jest to możliwe, aby umieścić tekst w rozpiętości :

<td id='someID'> 
    <a>anchor</a> 
    <span>[ some text ]</span> 
</td> 

Możesz zrobić:

$('td#someID span').text('new text') 
+1

Prawie identyczne z tym, co publikowałem. –

+0

@ g.d.d.c ahhh ale nie zrobiłeś :-P – Neal

+1

Zrobiłem, ale po dodaniu mojego komentarza do twojego.:) –

3

bez zmiany znaczników:

Live Demo

var anchor = $('td').find('a').clone(); 
$('td').text('{ some other text }').prepend(anchor); 
+0

Działa, ale nie jest bardzo elegancki. Znacznik jest niepotrzebnie usuwany i dodawany z powrotem do DOM. Jest to możliwe dzięki znacznie mniejszej zmianie w stosunku do DOM, zobacz moją odpowiedź –

Powiązane problemy