2012-02-28 30 views
6

Tôi có một div có thể bị ẩn hoặc không, tùy thuộc vào người dùng. Div đó có một thuộc tính được gọi là 'attrLoc'. Những gì tôi muốn là để có thể lấy lại giá trị thuộc tính đó từ php. Hy vọng ai đó có thể giúp đỡ. Cảm ơn bạn trước cho câu trả lời của bạn. Chúc mừng. Marc.php - làm cách nào tôi có thể truy lục giá trị thuộc tính thẻ div

HTML của tôi:

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

Nó không giống như một vấn đề PHP. Bạn có thể mô tả nó nhiều hơn? – Michas

+0

@Poonam Điều đó không đúng. – kapa

+0

@Michas: xin chào. Tại sao nói như vậy? – Marc

Trả lời

7

XPath hoàn toàn là tiêu chuẩn để truy vấn cấu trúc XML. Tuy nhiên, lưu ý rằng nếu bạn muốn phân tích cú pháp HTML từ một nguồn không đáng tin cậy, đó là nguồn mà HTML không được định dạng tốt, bạn nên thích DOMDocument::loadHTML() đến SimpleXML biến thể, cụ thể là simplexml_load_string.

Ví dụ

<?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"); 
} 

Hy vọng nó sẽ giúp!

+0

Cảm ơn bạn rất nhiều vì đã giúp Tom. Những gì bạn đề xuất là ngoài kiến ​​thức của tôi nhưng tôi sẽ đọc kỹ điều này để hiểu nó. Thks – Marc

+0

Bạn thực sự nên thử và học ngôn ngữ XPath, đó là một loại trình tiết kiệm cuộc sống liên quan đến điều hướng XML! Khá nhiều tương đương với các bộ chọn CSS, có thể là một chút chi tiết hơn và ít trung tâm HTML hơn mặc dù. –

4

Sử dụng jQuery trong JavaScript

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

Sau đó, bạn có thể gửi các giá trị cho PHP

EDIT:

Nếu bạn đang làm việc với một file HTML trang/DOM trong PHP, bạn có thể sử dụng SimpleXML để duyệt DOM và kéo các thuộc tính của bạn theo cách đó

$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 />'); 
} 

Bạn sẽ thấy tên và giá trị của các thuộc tính đổ

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

Xin chào darryn. Như đã đề cập, tôi đang tìm một giải pháp trong php ... – Marc

+0

Tôi mở rộng câu trả lời của mình một chút. –

+0

Một lần nữa, tôi đang tìm kiếm một cách để trích xuất giá trị đó từ tập lệnh php của tôi, không sử dụng Jquery. Cảm ơn anyway ... – Marc

1

để làm điều này với việc sử dụng php đơn giản html phân tích cú pháp dom. có một chút đường cong học tập, nhưng loại hữu ích

http://simplehtmldom.sourceforge.net/

+0

Xin chào subdesign. Vấn đề là, ứng dụng web của tôi chủ yếu là ajax. Trang mặc định chỉ bao gồm các trình bao bọc chứ không phải nội dung của chúng. Vì vậy, thẻ div thuộc tính mà tôi cần không được hiển thị trong mã nguồn mặc định. Xem xét, giải pháp bạn đề xuất có hoạt động không? – Marc

+0

Tôi không thấy ý của bạn không được hiển thị trong mã nguồn mặc định. Với lib này bạn có thể đọc từ chuỗi, url và tập tin, và có thể nhận được các thuộc tính, đối tượng phần tử .. – subdesign

+0

Dường như bạn phải liên kết một trang html để sử dụng những gì bạn đang đề xuất. Vấn đề là trang html của tôi chỉ chứa một div gọi là wrapper. Div đó trống. Không có yếu tố, không có gì. Nội dung của div đó (rất nhiều phần tử), được tải thông qua các cuộc gọi ajax dựa trên tương tác của người dùng. Vì vậy, nếu tôi sử dụng get_html() trên trang mặc định, chúng sẽ chỉ là trình bao bọc chính. Vì vậy, không thể xác định được yếu tố mà tôi quan tâm. – Marc

0

Làm thế nào về vấn đề này

$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); 

Đầu ra

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

Bạn cũng có thể sử dụng 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

Có lẽ cách ngắn nhất, vì chúng tôi có thuộc tính 'id' nhưng XPath linh hoạt hơn nhiều, imho. Rất mong chờ một 'getElementBySelector()' từ nhóm PHP ... –

+0

Xin chào Kuba. Cảm ơn các đầu vào. Tất cả điều này là một chút mới với tôi. Vì vậy, tôi sẽ mất một ít thời gian để có được nó. Cảm ơn bạn ... – Marc

+0

nên tảiHTML() – kjdion84

Các vấn đề liên quan