2011-11-13 129 views
2

如何獲取每個元素屬性的寬度和高度?通過DOM或XPATH獲取每個元素屬性的寬度和高度

例如,

$dom = new DOMDocument; 
$dom->loadHTML('<div class="item" style="width:295px; height:210px; border:1px solid #000;"></div><div></div>'); 

foreach($dom->getElementsByTagName('div') as $node) 
{ 
    $style = $node->getAttribute('style'); 

    var_dump($style); 
} 

結果,

string 'width:295px; height:210px; border:1px solid #000;' (length=49) 
string '' (length=0) 

但這些都是我所追求的,

  1. 選擇擁有的只有item類名的div
  2. 僅得到295(寬度)和210(高度)。

DOM可能嗎?還是XPATH?

編輯:

我似乎設法選擇與現在的類名的股利,

$dom = new DOMDocument; 
$dom->loadHTML('<div class="item" style="width:295px; height:210px; border:1px solid #000;"></div><div></div>'); 

$xpath = new DOMXpath($dom); 

foreach ($xpath->query('//*[@class="item"]') as $node) { 

    $style = $node->getAttribute('style'); 

    var_dump($style); 
} 

現在,這就是我唯一的後,

得到295(寬)和210(身高)。

+0

http://stackoverflow.com/questions/3448005/在xpath-and-xquery/3448050中執行條件#3448050將回答有關XPath抓取具有某個類屬性的div的部分。您需要常規字符串函數或CSS解析器來分解內聯樣式。這不是DOM的域名。 – Gordon

+2

http://stackoverflow.com/questions/4432334/parse-inline-css-values-with-regex回答如何在正文上用正則表達式解析內聯樣式 – Gordon

+1

以獲得具有item屬性的class屬性的div樣式屬性你也可以做'// div [@ class =「item」]/@ style'。這會返回一個DOMAttr。 – Gordon

回答

1

如果你不想使用正則表達式,你可以使用簡單的字符串函數來提取你需要的東西。這裏是一個例子,它很可能可以改進。

$width = 'width:'; $height = 'height:'; 
// Adding whitespace will not affect the result 
$str = ' width: 295 px; height: 210 px; border:1px solid #000;'; 

$width_str = strstr($str, $width); 
echo 'Width: "' . trim(substr($width_str, strlen($width), stripos($width_str, 'px;') - strlen($width))) . '"'; 

echo "\n"; 

$height_str = strstr($str, $height); 
echo 'Height: "' . trim(substr($height_str, strlen($height), stripos($height_str, 'px;') - strlen($height))) . '"'; 

當然,你可以與他們的字符串文字替換$width$height變量,並移除strlen()的調用,因爲他們將是恆定的整數。

Demo

+0

謝謝你的答案,尼克! :-) – laukok

1
function GetStyleValue($style, $type){ 
$value = false; 
$all = explode(';',$style); 
foreach($all as $part){ 
    $temp = explode(':', $part); 
    if(trim($temp[0]) == $type){ 
     $value = (int)trim($temp[1]); 
    }  
} 
return $value;} 

您可以使用此功能來獲得widthheight或其他樣式值,只要致電:

$width = GetStyleValue($img->getAttribute("style"), 'width');

相關問題