2014-09-25 68 views
0

我試圖從一個div中獲取內容。這是我的例子:php 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> 

我需要遍歷得到所有URL的選擇,我只需要這些文字:「/一百七十五分之九十○」,「/一百七十六分之九十○」,..

我試圖通過使用此代碼file_get_html獲得:

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

,但我的輸出是:方案1,方案2,方案3 ...

有人能幫助我嗎? 謝謝。

+0

我們可以使用JavaScript或jQuery嗎? – 2014-09-25 09:22:28

+0

它在Q標題中顯示「php」。 – Paul 2014-09-25 09:24:43

+0

如果您使用的是DOM解析器(簡單的html dom?),您需要選擇並遍歷'option'元素並獲取url屬性。 – 2014-09-25 09:26:13

回答

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」。

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

+1

強制性的「不要用正則表達式解析html!」評論。 – 2014-09-25 09:24:41

+1

OP使用PHP的DOM解析器,他們只是不明白它是如何工作的。 – serakfalcon 2014-09-25 09:25:32

+0

這就是爲什麼我把最後一行放在那裏:但是,根據你在做什麼,使用php的DOM解析器可能會更好。 – Paul 2014-09-25 09:25:40

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); 
+1

這是一個PHP問題 - 請參閱問題標題和標籤。 – 2014-09-25 09:26:46

+0

@ialarmedalien,對不起,我沒有注意到,我會編輯它並使用這些值的ajax請求。 – 2014-09-25 09:29:22

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; 
} 
+0

謝謝!這就是我要的 – dina 2014-09-25 09:37:38

0

這裏,如果你需要使用PHP DOM解析器的解決方案:

$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; 
}