我有一个包含多个Select的表单,我想检索<option>
元素的getAttribute('value')
和textContent
以构建数组
- 我有一个代码可以在以下环境下工作:**PHP版本5.6.34、7.2.34、7.4.21
- 不适用于:**PHP版本7.0.33,7.4.33
我的代码示例:
</form>
<select id="imageextention" name="imageextention" onchange="viewimage('formsig');" class="select">
<option value="blue.gif">sigblue</option>
<option value="green.gif">siggreen</option>
<option value="orange.gif">sigorange</option>
</select>
<select id="fontcolor" name="fontcolor" onchange="viewimage('formsig');">
<option value="#7BCEDE">blue</option>
<option value="#A5B531">green</option>
<option value="#FF8C29">orange</option>
<option value="#F76B7B">pink</option>
<option value="#B584BD">purple</option>
<option value="#FFBD08">yellow</option>
</select>
</form>
$tagname = $doc->getElementById('imageextention')->nodeName;
if ($tagname == "select") {
$serials = $doc->getElementById('imageextention')->childNodes;
$imageextentionM = array();
foreach ($serials as $n) {
array_push($imageextentionM[$n->getAttribute('value')] = $n->textContent);
}
}
$tagname2 = $doc->getElementById('fontcolor')->nodeName;
if ($tagname2 == "select") {
$serials = $doc->getElementById('fontcolor')->childNodes;
$fontcolorM = array();
foreach ($serials as $n) {
array_push($fontcolorM[$n->getAttribute('value')] = $n->textContent);
}
$activecolortxtM="";
}
}
使用PHP版本7.0.33,7.4.33我有这个错误:
调用未定义的方法DOMText::getAttribute()......堆栈跟踪:#0 {main}已抛出....
它无法识别子元素的getAttribute('value')
我知道我的代码不干净。
我尝试使用getElementsByTagName
,但它列出了页面的所有"选项"元素
$num = $doc->getElementById("imageextention")->childNodes->length;
$items = $doc->getElementsByTagName('option');
for ($i=0; $i < $num; $i++) {
$items = $doc->getElementsByTagName('option');
$imageextentionM[$items[$i]->getAttribute('value')]= $items[$i]->textContent;
}
提前感谢您的协助。
1条答案
按热度按时间tp5buhyn1#
只是猜测,但您希望在某个地方获得DOMElement对象,但您获得的是DOMText对象,它没有方法getAttribute,最有可能是在
->childNodes
,它也包含文本节点。因此检查类型将解决错误: