2012-02-28 15 views
6

Tengo un div que puede ocultarse o no, según el usuario. Ese div tiene un atributo llamado 'attrLoc'. Lo que me gustaría es ser capaz de recuperar ese valor de atributo de php. Espero que alguien pueda ayudar. Gracias de antemano por sus respuestas. Aclamaciones. Bagazo.php: cómo puedo recuperar un valor de atributo de etiqueta div

Mi HTML:

<div id="btn-loc" class="hidden" attrLoc="1"> 
... 
</div> 
+0

No parece un problema de PHP. ¿Podrías describirlo un poco más? – Michas

+0

@Poonam Eso no es verdad. – kapa

+0

@Michas: hola. ¿Por qué decir eso? – Marc

Respuesta

7

XPath es bastante el estándar para que consulta estructuras XML.

Sin embargo, tenga en cuenta que si se quiere analizar HTML a partir de una fuente no confiable, que es una fuente donde HTML no es absolutamente bien formado, se debe preferir a DOMDocument::loadHTML()SimpleXML variantes, en particular, simplexml_load_string.

Por ejemplo

<?php 
$html = ' 
<div id="btn-loc" class="hidden" attrLoc="1"> 
    ... 
</div>'; 

$doc = DOMDocument::loadHTML($html); 
$xpath = new DOMXPath($doc); 
$query = "//div[@id='btn-loc']"; 
$entries = $xpath->query($query); 
foreach ($entries as $entry) { 
    echo "Found: " . $entry->getAttribute("attrloc"); 
} 

espero que ayude!

+0

Muchas gracias Tom por la ayuda. Lo que propones está más allá de mi conocimiento, pero leeré esto cuidadosamente para entenderlo. Thks – Marc

+0

¡Realmente deberías probar y aprender el lenguaje XPath, es una especie de salvavidas con respecto a la navegación XML! Prácticamente equivalente a los selectores de CSS, puede ser un poco más detallado y menos centrado en HTML. –

4

Usando jQuery en JavaScript

var state = $('#btn-loc').attr('attrLoc'); 

entonces usted puede enviar el valor de PHP

EDIT:

Si está trabajando con un archivo HTML página/DOM en PHP puede usar SimpleXML para recorrer el DOM y extraer sus atributos de esa manera

$xml = simplexml_load_string(
    '<div id="btn-loc" class="hidden" attrLoc="1"> 
    ... 
    </div>' 
); 

foreach (current($xml->xpath('/*/div'))->attributes() as $k => $v) 
{ 
    var_dump($k,' : ',$v,'<br />'); 
} 

verá el nombre y el valor de los atributos objeto de dumping

id : btn-loc 
class : hidden 
attrLoc : 1 
+0

Hola, darryn. Como mencioné, estoy buscando una solución dentro de php ... – Marc

+0

Expandí mi respuesta un poco. –

+0

Una vez más, estoy buscando una forma de extraer ese valor de mi script php, sin usar Jquery. Gracias de todos modos ... – Marc

1

de hacer esto con el uso de php HTML simple analizador DOM. tiene un poco de curva de aprendizaje, pero un poco útil

http://simplehtmldom.sourceforge.net/

+0

Hola subdiseño. El caso es que mi aplicación web está principalmente impulsada por Ajax. La página predeterminada solo continúa con los contenedores y no con su contenido. Entonces, la etiqueta div, que es el atributo que necesito, no se muestra en el código fuente predeterminado. Considerando eso, ¿funcionará la solución que propones? – Marc

+0

No veo lo que quiere decir que no se muestra en el código fuente predeterminado. Con esta lib puedes leer cadenas, url y archivos, y puedes obtener atributos, objetos de elementos ... – subdesign

+0

Parece que tienes que vincular una página html para usar lo que estás proponiendo. El caso es que mi página html contiene solo un div llamado wrapper. Ese div está vacío. Sin elementos, nada. El contenido de ese div (muchos elementos) se carga a través de llamadas ajax basadas en la interacción del usuario. Entonces, si uso get_html() en la página predeterminada, será solo el contenedor principal. Es imposible identificar el elemento que me interesa. ¿Verdad? – Marc

0

¿Qué tal esto

$str = '<div id="btn-loc" class="hidden" attrLoc="1">'; 
$pattern = '/<div id="btn-loc".*\sattrLoc="([0-9])">/'; 
preg_match($pattern, $str, $matches); 
var_dump($matches); 

salidas

array 
    0 => string '<div id="btn-loc" class="hidden" attrLoc="1">' (length=45) 
    1 => string '1' (length=1) 
2

también puede utilizar Document Object Model

<?php 
$str = '<div id="btn-loc" class="hidden" attrLoc="1"> 
text 
</div>'; 
$doc = new DOMDocument(); 
$d=$doc->loadHtml($str); 
$a = $doc->getElementById('btn-loc'); 
var_dump($a->getAttribute('attrloc')); 
+0

Probablemente el camino más corto, ya que tenemos un atributo 'id', pero XPath es mucho más versátil, imho. Esperando desesperadamente un 'getElementBySelector()' del equipo de PHP ... –

+0

Hola Kuba. Gracias por el aporte. Todo esto es un poco nuevo para mí. Así que me tomaré un poco de tiempo para entrar en eso. Gracias ... – Marc

+0

debería ser loadHTML() – kjdion84

Cuestiones relacionadas