使用val()更改值的PhpQuery问题

时间:2013-05-30 08:57:55

标签: php phpunit phpquery

我有一个看起来像这样的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()的值使用选择的选择器设置每个元素的值,如下所示。如果我误解了文档或我的代码中的其他内容被破坏,任何人都可以向我解释问题所在。

  • val()获取第一个匹配元素的value属性的内容。
  • val($ val)设置每个匹配元素的value属性。

1 个答案:

答案 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