2012-09-16 32 views
1

我需要获取特定div之间包含的所有文本。在下面的例子中,我想与类名“ST”的DIV之间的一切:使用php获取包含在特定html元素中的文本

<div class="title">This is a title</div> 
<div class="st">Some example <em>text</em> here.</div> 
<div class="footer">Footer text</div> 

那么结果将是

Some example <em>text</em> here. 

甚至只是

Some example text here. 

有谁知道如何做到这一点?

+2

您可以考虑使用[DOMElement](http://php.net/manual/en/book.dom.php) – Touki

回答

2

服务器端的PHP

一个非常基本的方法是这样的:

$data = ''; // your HTML data from the question 
preg_match('/<div class="\st\">(.*?)<\/div>/', $data, $match); 

然后遍历$match对象。但是,如果您的DIV内部有其他DIV,则可能会返回错误的数据。

更合适的方法是:

function getData() 
{ 
    $dom = new DOMDocument; 
    $dom -> loadHTML($data); 
    $divs = $dom -> getElementsByTagName('div'); 

    foreach ($divs as $div) 
    { 
     if ($div -> hasAttribute('class') && strpos($div -> getAttribute('class'), 'st') !== false) 
     { 
      return $div -> nodeValue; 
     } 
    } 
} 

客户端

如果您使用jQuery,它会很容易这样的:

$('.st').text(); 

$('.st').html(); 

如果你使用普通的JavaScript,这将是一个有点复杂,因为你必须检查所有DIV元素,直到你找到一个你想要的CSS类:

function foo() 
{ 
    var divs = document.getElementsByTagName('div'), i; 

    for (i in divs) 
    { 
     if (divs[i].className.indexOf('st') > -1) 
     { 
      return divs[i].innerHTML; 
     } 
    } 
} 
0

PHP是一种服务器端语言,为此,您应该使用客户端语言(如javascript)(并可能使用像jQuery这样的库来实现简单的快速跨浏览器编码)。然后使用JavaScript将您需要的数据发送到后端进行处理(Ajax)。

jQuery的例子:

var myText = jQuery(".st").text(); 

jQuery.ajax({ 
    type: 'POST', 
    url: 'myBackendUrl', 
    myTextParam: myText, 
    success: function(){ 
     alert('done!'); 
    }, 
}); 

然后,在PHP中:

<?php 
    $text = $_POST['myTextParam']; 
    // do something with text 
0

使用jQuery/AJAX

然后像做:

<script> 
$(document).ready(function() { 
$.ajax({ 
     type: "POST", 
     url: "urltothepageyouneed the info", 
     data: { ajax: "ajax", divcontent:$(".st").html()} 
     }) 

}); 
</script> 

基本上

$(".st").html() 

将返回HTML

$(".st").text() 

将返回文本

希望帮助

0

使用XML parser

$htmlDom = simple_load_string($htmlSource); 
$results = $htmlDom->xpath("//div[@class='st']/text()"); 

while(list(, $node) = each($result)) { 
    echo $node, "\n"; 
} 
1

使用DOM。例如:

$html_str = "<html><body><div class='st'>Some example <em>text</em> here.</div></body></html>"; 
$dom = new DOMDocument('1.0', 'iso-8859-1'); 

$dom->loadHTML($html_str); // just one method of loading html. 
$dom->loadHTMLFile("some_url_to_html_file"); 


$divs = getElementsByClassName($dom,"st"); 
$div = $divs[0]; 

$str = ''; 
foreach ($div->childNodes as $node) { 
    $str .= $dom->saveHTML($node); 
} 

print_r($str); 

以下函数不是我的,而是this user's。如果您发现此功能有用,请转到之前链接的答案并投票。

function getElementsByClassName(DOMDocument $domNode, $className) { 
    $elements = $domNode->getElementsByTagName('*'); 
    $matches = array(); 
    foreach($elements as $element) { 
     if (!$element->hasAttribute('class')) { 
      continue; 
     } 
     $classes = preg_split('/\s+/', $element->getAttribute('class')); 
     if (!in_array($className, $classes)) { 
      continue; 
     } 
     $matches[] = $element; 
    } 
    return $matches; 
} 
相关问题