1

我需要获取特定 div 之间包含的所有文本。在下面的示例中,我想获取类名为 "st" 的 div 之间的所有内容:

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

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

4

5 回答 5

3

PHP中的服务器端

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

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

然后迭代$match对象。但是,如果您的.stDIV 内部有另一个 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;
        }
    }
}
于 2012-09-16T09:17:33.567 回答
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);

下面的函数不是我的,而是这个用户的. 如果您发现此功能有用,请转到先前链接的答案并投票。

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;
}
于 2012-09-16T09:48:56.360 回答
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
于 2012-09-16T08:51:13.117 回答
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()

将返回文本

希望有帮助

于 2012-09-16T08:57:40.927 回答
0

使用XML 解析器

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

while(list( , $node) = each($result)) {
    echo $node, "\n";
}
于 2012-09-16T09:02:32.227 回答