我试图从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 ...
有人可以帮帮我吗? 感谢。答案 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”。