php div内容找到

时间:2014-09-25 09:18:40

标签: php html

我试图从div中获取内容。这是我的例子:

<div id="holder">
  <div class="drop_down">
    <select name="lists" id="lists" onchange="changeDropDown(this);">
        <option value="175" url="/90/175">
        Option 1    </option>
        <option value="176" url="/90/176">
        Option 2    </option>
        <option value="185" url="/90/177">
        Option 3    </option>
    </select>
  </div>
</div>

我需要迭代来获取选择中的所有网址,我只需要这些文字:&#34; / 90/175&#34;,&#34; / 90/176&#34;,..

我尝试使用此代码通过file_get_html:

$html = file_get_html($path);
$con_div = $html->find('div.drop_down',0);
echo $con_div->plaintext;

但我的输出是:选项1,选项2,选项3 ...

有人可以帮帮我吗? 感谢。

5 个答案:

答案 0 :(得分:1)

执行$e->plaintext时,您将获得所有子节点的文本值,并删除所有标记。所以当然你不会得到url属性,这是其他所有的东西!

这可以让你得到你想要的东西:

$html = file_get_html($path);
$con_div = $html->find('#lists',0);
$options = $con_div->children();
foreach($options as $option) {
    echo $option->url;
}

答案 1 :(得分:0)

preg_match_all是你的朋友:

$matches = null;
$returnValue = preg_match_all('/url="(.*)"/', '<div id="holder">
  <div class="drop_down">
    <select name="lists" id="lists" onchange="changeDropDown(this);">
        <option value="175" url="/90/175">
        Option 1    </option>
        <option value="176" url="/90/176">
        Option 2    </option>
        <option value="185" url="/90/177">
        Option 3    </option>
    </select>
  </div>
</div>', $matches);

它会填充像

这样的$匹配
$matches = array (
  0 => 
  array (
    0 => 'url="/90/175"',
    1 => 'url="/90/176"',
    2 => 'url="/90/177"',
  ),
  1 => 
  array (
    0 => '/90/175',
    1 => '/90/176',
    2 => '/90/177',
  ),
);

但是,根据你正在做的事情,使用php的DOM parser可能会更好。

答案 2 :(得分:0)

您可以使用.each函数迭代它们然后获取它们的值。 这有助于:http://jsfiddle.net/f49bLnmy/

如果您不想转到jsfiddle

,这是代码
<div id="holder">
  <div class="drop_down">
    <select name="lists" id="lists" onchange="changeDropDown(this);">
        <option value="175" url="/90/175">
        Option 1    </option>
        <option value="176" url="/90/176">
        Option 2    </option>
        <option value="185" url="/90/177">
        Option 3    </option>
    </select>
  </div>
</div>

<script>
$(document).ready(function(){
    $("option").each(function(){
        alert($(this).attr("url"));
        //$(this).attr("url") >> Use this line to get the values
    });
});
</script>

为了在PHP页面中使用这些值,您可以使用值发送ajax请求,然后将它们拆分为php数组

使用此脚本:

<script>
    $(document).ready(function(){
        var urls= "";
        $("option").each(function(i){
            urls += $(this).attr("url");
            if(i < $("option").length - 1)
                urls += ",";
        });
        $.ajax({
            url: "../phppage.php",
            type: "POST",
            data: {data: urls},
            success: function(p_data)
            {
                alert(p_data);
            }
       });
    });
</script>

PHP页面

$data = $_POST['data'];
$array = explode(",", $data);
echo ($array);

答案 3 :(得分:0)

如果您需要使用PHP DOM Parser,那么这是一个解决方案:

$html = file_get_html($path);
foreach($html->find('div.drop_down select#lists option') as $option)
{
   echo "Value:" . $option->value . "; URL:" . $option->url . PHP_EOL;
}

答案 4 :(得分:0)

这是使用DOM API

的解决方案
$urls = array();

$domDocument = new DOMDocument();
$domDocument->loadHTMLFile($filePath);

$selectListsNode = $domDocument->getElementById('lists');

$optionsNodes  = $selectListsNode->getElementsByTagName('option');
foreach($optionsNodes as $optionNode) {
    if( $optionNode->hasAttribute('url') ) {
        $urls []= $optionNode->getAttribute('url');
    }
}

print_r($url);输出:

Array ( [0] => /90/175 [1] => /90/176 [2] => /90/177 )

如果你真的想从所有“。drop_down”后代获得“网址”:

$urls = array();

$filePath = 'http://localhost/Test/m/index.html';
$domDocument = new DOMDocument();
$domDocument->loadHTMLFile($filePath);

$xpathExpression = '//*[contains(concat(" ", normalize-space(@class), " "), " drop_down ")]';
$xpath = new DOMXPath($domDocument);
$divDropDownNodes = $xpath->query($xpathExpression);

foreach($divDropDownNodes as $divDropDownNode) {
    $optionsNodes  = $divDropDownNode->getElementsByTagName('option');
    foreach($optionsNodes as $optionNode) {
        if( $optionNode->hasAttribute('url') ) {
            $urls []= $optionNode->getAttribute('url');
        }
    }
}

请注意,“url”不是有效的HTML属性。 如果您使用的是HTML5,我建议您将其更改为“data-url”。