使用php获取包含在特定html元素中的文本

时间:2012-09-16 08:48:48

标签: php regex parsing

我需要获取特定div之间的所有文本。在下面的例子中,我想获得div与类名“st”之间的所有内容:

<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.

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

3 个答案:

答案 0 :(得分:2)

PHP中的服务器端

一种非常基本的方式是这样的:

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

然后迭代$match对象。但是,如果.st 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;
        }
    }
}

答案 1 :(得分: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()

将返回文本

希望有所帮助

答案 2 :(得分:0)

使用XML parser

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

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