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 を使用している場合、目的の CSS クラスを持つ要素が見つかるまで、すべての DIV 要素をチェックする必要があるため、少し複雑になります。

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

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 に答える
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 に答える