webForumDet fria alternativet

$doc->getElementById

5 svar · 519 visningar · startad av Schmoo2

Schmoo2Medlem sedan nov. 200721 inlägg
#1

Hej,

Jag skulle vilja nå en div och sätta dess width med PHP när dok laddas. Går det? Jag började med att försöka nå elementet med hjälp av getElementById i PHP. Jaghar gjort en enkel testsida och nedan syns php-koden. Men jag får ingen info från getElementById. getElementsByTagName funkar. Vad gör jag för fel?

<html>
<head>
<title>My Page</title>
<style>
#id { color:#33FF66; width:40px;}
</style>
</head>
<body>
<p id="atest"><a href="/mypage1">Hello World!</a></p>
<p><a href="/mypage2">Another Hello World!</a></p>
</body>
</html>
$doc = new DOMDocument();
// need to validate document before refering to the id
$doc->validateOnParse = true;
$doc->loadHTMLFile("test.html");
echo  $doc->getElementById('atest')->color;
$tags = $doc->getElementsByTagName('a');
foreach ($tags as $tag) {
       echo $tag->getAttribute('href');
}
SPiNMedlem sedan mars 20005 832 inlägg
#2
$doc = new DOMDocument();
echo $doc->getElementById('atest')->setAttribute("color", "#fff");
...
$color = $doc->getElementById('atest')->getAttribute("color");

Det finns inget värde på 'color' på ett element, som du försöker kalla på.

Schmoo2Medlem sedan nov. 200721 inlägg
#3

Har testat med height och width också men får inget värde. Jag får ingen info från getElementById men getElementsByTagName funkar. Det är width jag vill kunna ändra, color vara bara en test för att försöka få ngt alls.

SPiNMedlem sedan mars 20005 832 inlägg
#4

Men ditt 'atest'-element har ju inga attribut definierade, förutom ett id. Eftersom att du använder CSS i head-taggen för att definiera längd, höjd och färg får inte ditt element dessa attribut. Du får bygga om din HTML-sida eller göra en väldigt krånglig work-around som läser av CSS-informationen och var den appliceras samt hur du kan ändra den - inget jag rekommenderar.

<html>
<body>
<p id="Paragraph" width="400">
</p>
</body>
</html>
$doc = new DOMDocument();
$pWidth = $doc->getElementById("Paragraph")->getAttribute("width");
echo "Paragrafens bredd är satt till: " . $pWidth;
Schmoo2Medlem sedan nov. 200721 inlägg
#5

Märker att jag verkligen skrev fel; det ska ju vara #atest inte #id. Ttyvärr så trots ändringen så funkar det inte. Kan man inte göra $doc->loadHTMLFile("test.html") på pen html-fil? Så att också getElementById och inte bara getElementsByTagName funkar. Varför funkar getElementsByTagName och inte getElementById ?

SPiNMedlem sedan mars 20005 832 inlägg
#6

Nu har jag ju skrivit det två gånger. När du märker upp höjd, bredd och färg bl.a. (eg. allt du märker upp) med CSS, ärver inte elementet de egenskaperna - webläsaren applicerar bara de egenskaperna på utmärkta objekt/element. Du får hårdkoda in egenskaperna för elementet, som jag gjorde i mitt förra exempel. Då och endast då kan du få ut den informationen med getElementById().

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb