2012-04-27 38 views
11

Ho un pulsante che viene definito come segue:Javascript ottenere il valore del testo del pulsante personalizzato

<button type="button" id="ext-gen26" class=" x-btn-text">button text here</button> 

e sto cercando di afferrarla in base al valore del testo, tuttavia, nessuno di è attributi contengono il valore del testo . È generato in un modo abbastanza personalizzato dal suo aspetto.

Qualcuno sa di un modo per trovare questo valore a livello di codice, oltre a leggere semplicemente il testo html? Oltre agli attributi?

Hai dimenticato un'altra cosa, l'ID per questo pulsante cambia regolarmente e, utilizzando jquery per afferrarlo, si verifica un'interruzione della pagina per qualche motivo. Se hai bisogno di informazioni sul perché ho bisogno di questo, fammi sapere.

Questo è il javascript che sto cercando di afferrare con:

var all = document.getElementsByTagName('*'); 
for (var i=0, max=all.length; i < max; i++) 
{ 
var elem = all[i]; 
if(elem.getAttribute("id") == 'ext-gen26'){ 
    if(elem.attributes != null){ 
     for (var x = 0; x < elem.attributes.length; x++) { 
      var attrib = elem.attributes[x]; 
      alert(attrib.name + " = " + attrib.value); 
     } 
    } 
} 
}; 

Viene fornito solo con la carta tre attributi definiti nel codice.

innerHTML, testo e testo Tutti ritornano come null.

+0

Quel "valore di testo" * è * il "testo html"; questo è tutto quello che puoi fare per ottenerlo perché è l'unico posto in cui esiste nel DOM. * modifica * aspetta; vuoi ottenere il testo dal pulsante o vuoi * trovare * il pulsante in base al suo contenuto? Il titolo della tua domanda e la formulazione di quella prima frase di conflitto; "ottieni il valore del testo del pulsante personalizzato" rispetto a "Sto cercando di afferrarlo in base al valore del testo". Quelli significano cose diverse. – Pointy

+0

Stai cercando di trovare un pulsante con il testo del pulsante 'contenuto qui', e fai qualcosa con quello? –

+0

@Pointy - Sì, in definitiva sto provando a ottenere un hook sul pulsante stesso, in base a quel valore di testo che si trova tra i tag. 'textContent' e innerHTML tornano entrambi come null. :( – hacket

risposta

10

Se si sta cercando di individuare il pulsante completamente dal suo contenuto di testo, vorrei prendere una lista di tutti i pulsanti e scorrere attraverso di loro per trovare questo:

function findButtonbyTextContent(text) { 
    var buttons = document.querySelectorAll('button'); 
    for (var i=0, l=buttons.length; i<l; i++) { 
    if (buttons[i].firstChild.nodeValue == text) 
     return buttons[i]; 
    } 
} 

Ovviamente, se il contenuto di questo pulsante cambia anche un po 'il codice dovrà essere aggiornato.

+0

Questo è vicino a ciò che alla fine ho finito per implementare. Semplicemente non c'era modo di selezionare quel pulsante usando qualsiasi attributo. – hacket

12

È possibile farlo tramite le proprietà textContent/innerText (in base al browser). Ecco un esempio che funziona a prescindere dalla proprietà utilizza il browser:

var elem = document.getElementById('ext-gen26'); 
var txt = elem.textContent || elem.innerText; 
alert(txt); 

http://jsfiddle.net/ThiefMaster/EcMRT/

Si potrebbe anche farlo utilizzando jQuery:

alert($('#ext-gen26').text()); 
+0

Grazie per la soluzione, tuttavia, ho aggiornato per riflettere che l'ID e jquery non funziona per la mia situazione – hacket

Problemi correlati