我有一个看起来像这样的HTML表:
<table id="xp">
<tbody >
<tr>
<td>
<input type="text" data-type="string" value="testvalue" class="text">
</td>
<td>
<input type="text" data-type="string" value="" class="text">
</td>
</tr>
</tbody>
</table>
现在我想使用phpQuery来改变输入的值,如下所示:
require('**********/phpQuery.php');
$newsURL = "http://***********/index.php";
$newspage = file_get_contents($newsURL);
if( $newspage )
{
$pq = phpQuery::newDocument($newspage);
foreach(pq('.text') as $stuffs)
{
$stuffs->val('ompalompa');
$this->assertEquals("ompalompa", $stuffs->val());
}
}
我正在使用phpUnit断言来查看结果,但我刚收到此错误:
//Call to undefined method DOMElement::val()
当我使用val()方法从第一个类元素中获取值时,如下所示:
$stuffs = pq('.text')->val();
$this->assertEquals("testvalue", $stuffs);
工作正常,断言传递
Time: 8 seconds, Memory: 3.25Mb
OK (1 test, 1 assertion)
正如我从phpQuery手册中了解的那样,没有参数的val()只是使用选择的选择器获取第一个元素的值,而val()的值使用选择的选择器设置每个元素的值,如下所示。如果我误解了文档或我的代码中的其他内容被破坏,任何人都可以向我解释问题所在。
答案 0 :(得分:1)
在docs for phpQuery中,它指出当你使用foreach
循环时,会返回一个php DOM。这必须传递回phpQuery使用pq()。
将$stuffs
的所有出现更改为pq($stuffs)
出于好奇,我做了以下操作,因为我之前从未使用过phpQuery:
<?
require 'phpQuery-onefile.php';
$html = "<table id=\"xp\">
<tbody >
<tr>
<td>
<input type=\"text\" data-type=\"string\" value=\"testvalue\" class=\"text\">
</td>
<td>
<input type=\"text\" data-type=\"string\" value=\"\" class=\"text\">
</td>
</tr>
</tbody>
</table>";
$pq = phpQuery::newDocument($html);
foreach(pq('.text') as $stuffs)
{
pq($stuffs)->val('ompalompa');
echo pq($stuffs)->val()."</br>";
}
?>
输出结果为:
ompalompa
ompalompa
如果我使用:
$stuffs->val('ompalompa');
然后
Fatal error: Call to undefined method DOMElement::val() in /var/www/index.php on line 20