2012-02-28 3 views
6

У меня есть div, который может быть скрыт или нет, в зависимости от пользователя. Этот div имеет атрибут «attrLoc». Я бы хотел, чтобы было невозможно получить это значение атрибута из php. Надеюсь, кто-то может помочь. Заранее благодарю за ваши ответы. Приветствия. Марк.php - как я могу получить значение атрибута тега div

Мой HTML:

<div id="btn-loc" class="hidden" attrLoc="1"> 
... 
</div> 
+0

Это не похоже на проблему с PHP. Не могли бы вы описать это немного больше? – Michas

+0

@Poonam Это неправда. – kapa

+0

@Michas: привет. Почему так говорят? – Marc

ответ

7

XPath является стандартом для запросов к структурам XML.

Однако, обратите внимание, что если вы хотите, чтобы разобрать HTML из ненадежного источника, который является источником, где HTML не совсем хорошо сформированы, следует отдавать предпочтение DOMDocument::loadHTML() в SimpleXML варианты, в частности simplexml_load_string.

Для примера

<?php 
$html = ' 
<div id="btn-loc" class="hidden" attrLoc="1"> 
    ... 
</div>'; 

$doc = DOMDocument::loadHTML($html); 
$xpath = new DOMXPath($doc); 
$query = "//div[@id='btn-loc']"; 
$entries = $xpath->query($query); 
foreach ($entries as $entry) { 
    echo "Found: " . $entry->getAttribute("attrloc"); 
} 

Надеется, что это помогает!

+0

Большое спасибо Том за помощь. То, что вы предлагаете, не в моих силах, но я буду внимательно читать это, чтобы понять это. Thks – Marc

+0

Вы действительно должны попробовать изучать язык XPath, это своего рода спасение жизни в отношении навигации XML! В значительной степени эквивалентный селекторам CSS, может быть немного более подробным и менее ориентированным на HTML. –

4

Использование JQuery в JavaScript

var state = $('#btn-loc').attr('attrLoc'); 

Затем вы можете отправить значение PHP

EDIT:

Если вы работаете с HTML page/DOM в PHP вы можете использовать SimpleXML для прохождения DOM и потянуть ваши атрибуты таким образом

$xml = simplexml_load_string(
    '<div id="btn-loc" class="hidden" attrLoc="1"> 
    ... 
    </div>' 
); 

foreach (current($xml->xpath('/*/div'))->attributes() as $k => $v) 
{ 
    var_dump($k,' : ',$v,'<br />'); 
} 

Вы увидите имя и значение атрибутов сбрасывали

id : btn-loc 
class : hidden 
attrLoc : 1 
+0

Здравствуйте, darryn. Как упоминалось, я ищу решение в php ... – Marc

+0

Я немного расширил свой ответ. –

+0

Опять же, я ищу способ извлечь это значение из моего php-скрипта, не используя JQuery. Спасибо в любом случае ... – Marc

1

сделать это с использованием PHP простой HTML DOM парсер. имеет немного кривой обучения, но вид полезного

http://simplehtmldom.sourceforge.net/

+0

Привет, юзабилити. Дело в том, что мое веб-приложение в основном управляется ajax. Страница по умолчанию ограничивает только обертки, а не их содержимое. Поэтому тег div, который мне нужен, не отображается в исходном коде по умолчанию. Учитывая, будет ли решение, которое вы предлагаете работать? – Marc

+0

Я не вижу, что вы подразумеваете, не отображается в исходном коде по умолчанию. С помощью этой библиотеки вы можете читать строки, url и файл и получать атрибуты, объекты элементов. – subdesign

+0

Кажется, вам нужно связать страницу html, чтобы использовать то, что вы предлагаете. Дело в том, что моя html-страница содержит только одну div-оболочку. Этот div пуст. Никаких элементов, ничего. Содержимое этого div (много элементов) загружается через ajax-вызовы на основе взаимодействия пользователя. Поэтому, если я использую get_html() на странице по умолчанию, они будут только основной оболочкой. Поэтому невозможно идентифицировать интересующий меня элемент. Правильно? – Marc

0

Как об этом

$str = '<div id="btn-loc" class="hidden" attrLoc="1">'; 
$pattern = '/<div id="btn-loc".*\sattrLoc="([0-9])">/'; 
preg_match($pattern, $str, $matches); 
var_dump($matches); 

Выходы

array 
    0 => string '<div id="btn-loc" class="hidden" attrLoc="1">' (length=45) 
    1 => string '1' (length=1) 
2

Вы можете также использовать Document Object Model

<?php 
$str = '<div id="btn-loc" class="hidden" attrLoc="1"> 
text 
</div>'; 
$doc = new DOMDocument(); 
$d=$doc->loadHtml($str); 
$a = $doc->getElementById('btn-loc'); 
var_dump($a->getAttribute('attrloc')); 
+0

Возможно, самый короткий путь, поскольку у нас есть атрибут id, но XPath гораздо более универсален, imho. Отчаянно ожидая 'getElementBySelector()' из команды PHP ... –

+0

Hello Kuba. Спасибо за ввод. Все это для меня немного ново. Поэтому я займу немного времени, чтобы войти в него. Спасибо ... – Marc

+0

должен быть загруженHTML() – kjdion84

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