0

次のような 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 assert を使用して結果を確認していますが、次のエラーが発生します。

//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) 一致したすべての要素の値属性を設定します。
4

1 に答える 1

1

phpQueryのドキュメントでforeachは、php DOM でループすると返されると記載されています。これは、pq() を使用して phpQuery に戻す必要があります。

$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
于 2013-05-30T09:59:23.207 に答える