2015-01-16 100 views
1

我想要從給定HTML中的表單和輸入字段中提取和回顯屬性值。我發現它可能與DOMDocument。從HTML中提取表單和輸入字段

一個特定的輸入需要由<div style="position: absolute; left: -5000px;"></div>

我以爲我可以搜索如果輸入的父元素具有這種風格的屬性,或者輸入字段的名稱是類同b_7e0d9965bedeea1cc5f7217a9_4685998a30進行分組。但我不知道該怎麼做。

這是代碼:

$html = $theme['html']; // From a text input field 
$dom = new DOMDocument(); 
if (@$dom->loadHTML($html)) { 

    $forms = $dom->getelementsbytagname('form'); 

    foreach ($forms as $form) { 

     $form_action  = $form->getAttribute('action'); 
     $form_method  = $form->getAttribute('method'); 
     $form_id    = $form->getAttribute('id'); 
     $form_name   = $form->getAttribute('name'); 
     $form_class   = $form->getAttribute('class'); 
     $form_target  = $form->getAttribute('target'); 

     echo '<form'; 
     if (!empty($form_action)) { echo ' action="'. $form_action .'"'; } 
     if (!empty($form_method)) { echo ' method="'. $form_method .'"'; } 
     if (!empty($form_id)) { echo ' id="'. $form_id .'"'; } 
     if (!empty($form_name)) { echo ' name="'. $form_name .'"'; } 
     if (!empty($form_class)) { echo ' class="'. $form_class .'"'; } 
     if (!empty($form_target)) { echo ' target="'. $form_target .'"'; } 
     echo '>'; 

     $inputs = $dom->getelementsbytagname('input'); 

     foreach ($inputs as $input) { 

      $input_name  = $input->getAttribute('name'); 
      $input_value = $input->getAttribute('value'); 
      $input_id   = $input->getAttribute('id'); 
      $input_type  = $input->getAttribute('type'); 
      $input_class = $input->getAttribute('class'); 

      echo '<input'; 
      if (!empty($input_name)) { echo ' name="'. $input_name .'"'; } 
      if (!empty($input_value)) { echo ' value="'. $input_value .'"'; } 
      if (!empty($input_id)) { echo ' id="'. $input_id .'"'; } 
      if (!empty($input_type)) { echo ' type="'. $input_type .'"'; } 
      if (!empty($input_class)) { echo ' class="'. $input_class .'"'; } 
      echo '>'; 

     } 

     echo '</form>'; 
    } 
} 

一些背景信息:我希望用戶給他的電子郵件表單代碼複製並粘貼到一個文本框。然後,我想提取輸入字段的屬性以在我的模板中使用它們。

+1

您獲取dom元素的語法是錯誤的。它應該是'$ dom->的getElementsByTagName(「變量名」)' – Ankit

回答

0

這裏有幾件事情錯了你的語法

$html = $theme['html']; // Make sure $html is a String 
$dom = new DOMDocument(); 
//if (@$dom->loadHTML($html)) { 
if ($dom->loadHTML($html)) { //remove @ 
    //$forms = $dom->getelementsbytagname('form'); 
    $forms = $dom->getElementsByTagName("form"); 

進行這些更改,並再次檢查。希望它應該工作,然後

爲了讓每個輸入字段的父節點,你可以在一個DIV使用

$parentOfInput = $input->parentNode(); 
$parentAttribute = $parentOfInput->getAttribute('style'); 

爲組中的每個表,嘗試這樣做:

//echo '<form'; 
    echo '<div style="position: absolute; left: -5000px;"><form' 

,並在結束

//echo '</form>'; 
    echo '</form></div>'  

如果你想在現有的div中插入整個表單,你不能用PHP來做到這一點。因爲一旦HTML被重新調整,就不能使用PHP插入HTML。

但是你可以使用JavaScript或在你的情況下使用AJAX。將整個HTML文件保存在一個變量中。然後在AJAX調用中傳遞該變量。

$.ajax({url: "urFile.php"}).done(function(stringOfHTMLYouFormed) { 
    $("#divID").append(stringOfHTMLYouFormed); 
}); 
+0

感謝,代碼已經與語法錯誤的工作,我不知道如何再次 – Snowball

+0

感謝插入在特定情況下,DIV,但我只是想給一個組將表單的特定輸入字段轉換爲div。我需要創建一個if語句來檢查給定輸入字段的父元素是否具有這些樣式屬性,或者輸入字段的名稱是否類似於「b_7e0d9965bedeea1cc5f7217a9_4685998a30」 – Snowball

+1

您是否嘗試過使用$ domElement-> parentNode來獲取' input'場的父節點.. – Ankit

0

我將$parent = $input->parentNode->getAttribute('style');添加到foreach循環中以查找Parent的樣式。

後馬上我用它來測試,如果$parent具有所需的樣式來包裝,然後相應的輸入字段到一個div。

$parent = $input->parentNode->getAttribute('style'); 
if ($parent == 'position: absolute; left: -5000px;') { 
    echo '<div style="position: absolute; left: -5000px;">'; 
    echo '<input'; 
    if (!empty($input_name)) { echo ' name="'. $input_name .'"'; } 
    if (!empty($input_value)) { echo ' value="'. $input_value .'"'; } 
    if (!empty($input_id)) { echo ' id="'. $input_id .'"'; } 
    if (!empty($input_type)) { echo ' type="'. $input_type .'"'; } 
    if (!empty($input_class)) { echo ' class="'. $input_class .'"'; } 
    echo '></div>'; 
} else {    
    echo '<input'; 
    if (!empty($input_name)) { echo ' name="'. $input_name .'"'; } 
    if (!empty($input_value)) { echo ' value="'. $input_value .'"'; } 
    if (!empty($input_id)) { echo ' id="'. $input_id .'"'; } 
    if (!empty($input_type)) { echo ' type="'. $input_type .'"'; } 
    if (!empty($input_class)) { echo ' class="'. $input_class .'"'; } 
    echo '>'; 
} 
+0

感謝您的想法@Ankit使用parentNode – Snowball

相關問題