2012-04-27 18 views
11

que tiene un botón que se define como sigue:Javascript obtener el valor de texto del botón personalizado

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

y estoy tratando de agarrarlo con base en el valor de texto, sin embargo, ninguno de sus atributos contienen el valor de texto . Se genera de una manera bastante personalizada por su aspecto.

¿Alguien sabe de una manera de encontrar este valor programáticamente, además de simplemente ir a través del texto html? ¿Aparte de los atributos?

Olvidé otra cosa, la identificación para este botón cambia regularmente, y usar jquery para agarrarlo resulta en romper la página por alguna razón. Si necesita información sobre por qué necesito esto, hágamelo saber.

Este es el código JavaScript que estoy tratando de agarrar 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); 
     } 
    } 
} 
}; 

Sólo regresa con los tres atributos que se definen en el código.

innerHTML, texto y contenido de texto regresan como nulos.

+0

Ese "valor de texto" * es * el "texto html"; eso es todo lo que puede hacer para obtenerlo porque ese es el único lugar donde existe en el DOM. * editar * esperar; ¿Desea obtener el texto del botón, o desea * encontrar * el botón en función de su contenido? El título de su pregunta y la redacción de esa primera frase tipo de conflicto; "obtener el valor del texto del botón personalizado" en lugar de "Estoy tratando de tomarlo en función del valor del texto". Esos significan cosas diferentes. – Pointy

+0

¿Está tratando de encontrar un botón con el contenido 'texto del botón aquí', y hacer algo con eso? –

+0

@Pointy - Sí, en última instancia, estoy tratando de obtener un gancho en el botón, basado en el valor de texto que está entre las etiquetas. 'textContent' e innerHTML regresan como nulos. :( – hacket

Respuesta

10

Si usted está tratando de localizar el botón enteramente por su contenido de texto, me gustaría tomar una lista de todos los botones y recorrerlos para encontrar este:

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]; 
    } 
} 

Por supuesto, si el contenido de este botón cambia un poco, será necesario actualizar su código.

+0

Esto está cerca de lo que finalmente terminé implementando. Simplemente no había manera de seleccionar ese botón usando cualquier atributo. – hacket

12

Puede hacerlo a través de las propiedades textContent/innerText (depende del navegador). He aquí un ejemplo que funcionará sin importar el establecimiento utiliza el navegador:

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

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

También podría hacerlo utilizando jQuery:

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

Gracias por la solución, sin embargo, actualicé para reflejar que la ID y jquery no funciona para mi situación. – hacket

Cuestiones relacionadas