2015-01-16 2 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 (" tagName ")' – 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"); 

сделать эти изменения и проверьте еще раз. Надеюсь, что он должен работать, то

Чтобы получить родительский узел каждого поля ввода, вы можете использовать

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

Чтобы сгруппировать каждую форму в DIV, попробуйте сделать следующее:

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

и на конец

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

Если вы хотите вставить всю форму в существующий div, вы не можете сделать это с помощью PHP. Как только HTML будет перераспределен, вы не можете вставлять HTML с помощью PHP.

Однако вы можете использовать javascript или в своем случае AJAX. Сохраните весь HTML-код echo ing, в переменной. Затем передайте эту переменную в вызове AJAX.

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

спасибо, код уже работал с ошибками синтаксиса, я не знаю, как вставить div в этом конкретном случае – Snowball

+0

еще раз спасибо, но я просто хочу сгруппировать один конкретное поле ввода формы в div. Мне нужно создать оператор if, который проверяет, есть ли у этого родительского элемента заданного поля ввода эти атрибуты стиля, или если имя поля ввода является чем-то вроде «b_7e0d9965bedeea1cc5f7217a9_4685998a30» – Snowball

+1

Пробовали ли вы использовать $ domElement-> parentNode, чтобы получить ' input'. Родительский узел поля. – Ankit

0

Я добавил $parent = $input->parentNode->getAttribute('style'); в петлю Еогеасп искать стиль Родителя.

Сразу после этого я использую для проверки, имеет ли нужный стиль $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

Смежные вопросы