【问题标题】:php - how can I retrieve a div tag attribute valuephp - 如何检索 div 标签属性值
【发布时间】:2012-03-17 17:04:51
【问题描述】:

我有一个可以隐藏或不隐藏的 div,具体取决于用户。该 div 有一个名为“attrLoc”的属性。我想要的是能够从 php.ini 中检索该属性值。希望有人可以提供帮助。预先感谢您的回复。干杯。马克。

我的 HTML:

<div id="btn-loc" class="hidden" attrLoc="1">
...
</div>

【问题讨论】:

  • 看起来不像是 PHP 问题。你能再描述一下吗?
  • @Michas:你好。为什么这么说?
  • @Marc 1. 我在您的问题中没有看到任何 PHP 代码。 2. 在 PHP 中,直接处理 html 源代码并不常见。 3. 处理 html 源代码是 JavaScript 的典型。

标签: php html html-parsing


【解决方案1】:

XPath 是查询 XML 结构的标准。

但是,请注意,如果您想从不受信任的来源(即 HTML 格式不完全正确的来源)解析 HTML,您应该更喜欢 DOMDocument::loadHTML() 而不是 SimpleXML 变体,尤其是 simplexml_load_string。

举例

<?php
$html = '
<div id="btn-loc" class="hidden" attrLoc="1">
  ...
</div>';

$doc = DOMDocument::loadHTML($html);
$xpath = new DOMXPath($doc);
$query = "//div[@id='btn-loc']";
$entries = $xpath->query($query);
foreach ($entries as $entry) {
  echo "Found: " . $entry->getAttribute("attrloc");
}

希望对你有帮助!

【讨论】:

  • 非常感谢汤姆的帮助。您的建议超出了我的知识范围,但我会仔细阅读以了解它。谢谢
  • 你真的应该尝试学习 XPath 语言,它是一种关于 XML 导航的救命稻草!几乎等同于 CSS 选择器,但可能更冗长且以 HTML 为中心。
【解决方案2】:

在 JavaScript 中使用 jQuery

var state = $('#btn-loc').attr('attrLoc');

然后你可以将值发送到 PHP

编辑:

如果您在 PHP 中使用 HTML 页面/DOM,则可以使用 SimpleXML 遍历 DOM 并以这种方式提取属性

$xml = simplexml_load_string(
    '<div id="btn-loc" class="hidden" attrLoc="1">
    ...
    </div>'
);

foreach (current($xml->xpath('/*/div'))->attributes() as $k => $v)
{
    var_dump($k,' : ',$v,'<br />');
}

您将看到转储的属性的名称和值

id : btn-loc
class : hidden
attrLoc : 1

【讨论】:

  • 再次,我正在寻找一种从我的 php 脚本中提取该值的方法,而不是使用 Jquery。还是谢谢...
  • 您能否开发您在“编辑:”中提出的解决方案,而不是提及 Jquery?
  • 感谢 Darryn 的扩展。问题是,我的网络应用程序主要是 ajax 驱动的。默认页面仅包含包装器,而不包含它们的内容。所以我需要的属性 div 标签不会显示在页面的默认源代码中。考虑到这一点,您提出的解决方案会奏效吗?
  • 我需要有关您的问题的更多信息,以便进一步提供帮助。对不起
  • 从 XML 的角度来看,如果 HTML 源代码格式不正确,simplexml_load_string 也是不可靠的。您应该按照我的建议使用DOMDocument::loadHTML()。干杯
【解决方案3】:

你也可以使用Document Object Model

<?php
$str = '<div id="btn-loc" class="hidden" attrLoc="1">
text
</div>';
$doc = new DOMDocument();
$d=$doc->loadHtml($str);
$a = $doc->getElementById('btn-loc');
var_dump($a->getAttribute('attrloc'));

【讨论】:

  • 可能是最短的方法,因为我们有一个id 属性,但是 XPath 更加通用,恕我直言。急切地等待来自 PHP 团队的getElementBySelector()...
  • 你好库巴。感谢您的输入。这一切对我来说有点新鲜。所以我会花一点时间来了解它。谢谢...
  • 应该是 loadHTML()
【解决方案4】:

要使用 php 执行此操作,请使用简单的 html dom 解析器。 有一点学习曲线,但有点用处

http://simplehtmldom.sourceforge.net/

【讨论】:

  • 你好子设计。问题是,我的网络应用程序主要是 ajax 驱动的。默认页面仅包含包装器而不包含它们的内容。所以我需要的属性 div 标签不会显示在默认源代码中。考虑到这一点,您提出的解决方案会奏效吗?
  • 我不明白你的意思是什么没有显示在默认源代码中。有了这个库,你可以从字符串、url 和文件中读取,并且可以获取属性、元素对象..
  • 看来您必须链接一个 html 页面才能使用您所提议的内容。问题是我的 html 页面只包含一个名为 wrapper 的 div。那个 div 是空的。没有元素,什么都没有。该 div 的内容(大量元素)是通过基于用户交互的 ajax 调用加载的。因此,如果我在默认页面上使用 get_html(),它们将只是主要的包装器。所以不可能识别出我感兴趣的元素。对吧?
  • 我猜如果元素是动态加载的,这个 php 脚本不能处理它,但我不确定..
【解决方案5】:

这个怎么样

$str = '<div id="btn-loc" class="hidden" attrLoc="1">';
$pattern = '/<div id="btn-loc".*\sattrLoc="([0-9])">/';
preg_match($pattern, $str, $matches);
var_dump($matches);

输出

array
  0 => string '<div id="btn-loc" class="hidden" attrLoc="1">' (length=45)  
  1 => string '1' (length=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2021-11-22
    • 2012-08-22
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多