2014-01-10 4 views
1

Я создаю небольшой скрипт AJAX, который получит содержимое указанной веб-страницы, а затем отобразит содержимое скрытых DIV (ов), если есть один или несколько.Echo hidden div content

Скрытые DIV (ы) имеют style="display:none;" или style="display: none;", поэтому я хочу найти это.

Как я могу выполнить эту задачу? Я не очень хорошо с регулярными выражениями :(

Я пытался с этим, но он не работает до сих пор :)

$htmldata = file_get_contents($_GET['webaddr']); 
$value = preg_match_all('/<div\s*style=\"\s*display:\s*none\s*\">(.*?)<\/div>/s',$htmldata,$estimates); 

Большое спасибо!

+0

Уточнитните "не работает". – Goikiu

+0

Уверен, что он всегда имеет дисплей 'style =": none; "' и не скрыт через внешний CSS? – putvande

+0

Вы забыли ';' –

ответ

0

Я бы импортировал контент как новый DOMDocument, а затем воспользовался getAttribute, чтобы фильтровать для вас стили.

0

Вы можете использовать это с PHP> = 5,3

<?php 

$html = <<<'LOD' 
<div style="float:right">glups</div> 
<div style="display:none;"><span>glaps</span> <br/></div> 
<div style="border-top:1px solid red; display: none; float:right;">glops</div> 
<div style="display : none">glips</div> 
LOD; 

$dom = new DOMDocument(); 
@$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 

$xpath->registerNamespace("php", "http://php.net/xpath"); 
$xpath->registerPHPFunctions('preg_match'); 

$divNodes = $xpath->query('//div[php:functionString("preg_match", "~\bdisplay\s*:\s*none\b~i", @style) = 1]'); 
foreach ($divNodes as $divNode) { 
    $innerHTML = ''; 
    $children = $divNode->childNodes; 
    foreach ($children as $child) { 
     $innerHTML .= $child->ownerDocument->saveXML($child); 
    } 
    echo $innerHTML . "\n"; 
}