hoe element div verwijderen met preg replace
ik weet niet of dit uberhaupt mogelijk is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
// Je string, met als voorbeeld om de werking te laten zien een extra divje bla, die je in jouw situatie kan negeren.
$html = '
<div id="bla">
<div id="rij1">
<h1>titel moet weg</h1>
<p>deze tekst moet weg</p>
<div class="test">
<p>dit div element moet ook weg</p>
</div>
</div>
</div>';
// Maak een nieuw DOMDocument-object
$dom = new DOMDocument();
// Laad de HTML in het DOMDocument
$dom->loadHTML($html);
// Zoek het div-element met id "rij1"
$divToRemove = $dom->getElementById('rij1');
// Controleer of het element is gevonden voordat je het verwijdert
if ($divToRemove) {
// Verwijder het gevonden element en zijn inhoud
$divToRemove->parentNode->removeChild($divToRemove);
// Haal de HTML opnieuw op zonder het verwijderde element
$newHtml = $dom->saveHTML();
// Toon of gebruik $newHtml zoals je wilt
echo $newHtml;
}
?>
// Je string, met als voorbeeld om de werking te laten zien een extra divje bla, die je in jouw situatie kan negeren.
$html = '
<div id="bla">
<div id="rij1">
<h1>titel moet weg</h1>
<p>deze tekst moet weg</p>
<div class="test">
<p>dit div element moet ook weg</p>
</div>
</div>
</div>';
// Maak een nieuw DOMDocument-object
$dom = new DOMDocument();
// Laad de HTML in het DOMDocument
$dom->loadHTML($html);
// Zoek het div-element met id "rij1"
$divToRemove = $dom->getElementById('rij1');
// Controleer of het element is gevonden voordat je het verwijdert
if ($divToRemove) {
// Verwijder het gevonden element en zijn inhoud
$divToRemove->parentNode->removeChild($divToRemove);
// Haal de HTML opnieuw op zonder het verwijderde element
$newHtml = $dom->saveHTML();
// Toon of gebruik $newHtml zoals je wilt
echo $newHtml;
}
?>
Deze oplossing had ik nog niet gevonden. daar ben ik je erg dankbaar voor.
Nu de vraag hoe kan ik nu alles binnenin het div element rij1 verwijderen zodat dus alleen de buitenste div blijft staan. heb daar ook wel een javascript functie voor, maar wil dit dus juist met php voor elkaar krijgen. Dat zou dan wel moeten lukken met preg replace?
Toevoeging op 07/09/2023 15:32:20:
Probleem is natuurlijk dat je via preg replace het systeem niet kan laten weten welke </div> je bedoeld!!
Gewijzigd op 07/09/2023 15:32:58 door Paul Weiss
Je poging met preg_replace() was al serverside met PHP.
Eigenlijk is preg_replace hier niet heel handig in gebruik, terwijl je met DOMDocuemnt heel je HTML-code kan uitlezen en bewerken.
Toevoeging op 07/09/2023 15:44:58:
Als je jouw divje leeg wilt hebben, dan kan dit op deze manier, nadat je hebt gekeken of het element gevonden is:
Eigenlijk een vervanger van regel 26 (waarbij $divToRemove nu $divToEmpty heet)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
while ($divToEmpty->hasChildNodes()) {
$divToEmpty->removeChild($divToEmpty->firstChild);
}
?>
while ($divToEmpty->hasChildNodes()) {
$divToEmpty->removeChild($divToEmpty->firstChild);
}
?>
Gewijzigd op 07/09/2023 15:45:17 door - Ariën -
en is het mogelijk om 2 div elementen met elkaar te verwisselen? dus stel ik wil onderstaande 2 div elementen met elkaar verwisslen. Dus niet de inhoud maar het element 1 moet dan onder 2 komen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<div id="1">
<p>tekst hier van element 1</p>
</div>
<div id="2">
<p>tekst hier van element 2</p>
</div>
<p>tekst hier van element 1</p>
</div>
<div id="2">
<p>tekst hier van element 2</p>
</div>
Gewijzigd op 07/09/2023 16:08:32 door Paul Weiss
Je moet inderdaad tellen hoeveel div's je opent en sluit. (en hopen dat je html valide is).
Ik zou eerder zoeken in een oplossing waarbij je met dom of xpath zoekt in de boom van elementen.
Met xpath kun je zoeken naar elementen met id="rij1"
die zullen dan gevonden worden, ook als het niet gaat om <div id="rij1"> maar om <div class="jammer joh" id=rij1 >
Toevoeging op 07/09/2023 16:58:09:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
$html = '<div id="bla">
<div id="rij1">
<h1>titel moet weg</h1>
<p>deze tekst moet weg</p>
<div class="test">
<p>dit div element moet ook weg</p>
</div>
</div>
</div>';
// Create a new DOMDocument
$dom = new DOMDocument();
// Load the HTML string
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// Find the element with id="rij1"
$elementToRemove = $dom->getElementById('rij1');
// Remove the element and its contents
if ($elementToRemove) {
$elementToRemove->parentNode->removeChild($elementToRemove);
}
// Get the modified HTML
$modifiedHtml = $dom->saveHTML();
// Output the modified HTML
echo $modifiedHtml;
?>
$html = '<div id="bla">
<div id="rij1">
<h1>titel moet weg</h1>
<p>deze tekst moet weg</p>
<div class="test">
<p>dit div element moet ook weg</p>
</div>
</div>
</div>';
// Create a new DOMDocument
$dom = new DOMDocument();
// Load the HTML string
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// Find the element with id="rij1"
$elementToRemove = $dom->getElementById('rij1');
// Remove the element and its contents
if ($elementToRemove) {
$elementToRemove->parentNode->removeChild($elementToRemove);
}
// Get the modified HTML
$modifiedHtml = $dom->saveHTML();
// Output the modified HTML
echo $modifiedHtml;
?>
Toevoeging op 07/09/2023 17:00:53:
en als je div met id = rij1 wilt behouden:
vervang regels 18 / 24 door
Code (php)
Toevoeging op 07/09/2023 17:04:21:
en om het met XPath te doen zouden we dat stuk kunnen vervangen door
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Create a DOMXPath object
$xpath = new DOMXPath($dom);
// Use XPath to select the element with id="rij1"
$elements = $xpath->query('//*[@id="rij1"]');
// Check if an element was found
if ($elements->length > 0) {
$elementToModify = $elements->item(0);
// Remove all child nodes of the selected element
while ($elementToModify->hasChildNodes()) {
$elementToModify->removeChild($elementToModify->firstChild);
}
}
?>
// Create a DOMXPath object
$xpath = new DOMXPath($dom);
// Use XPath to select the element with id="rij1"
$elements = $xpath->query('//*[@id="rij1"]');
// Check if an element was found
if ($elements->length > 0) {
$elementToModify = $elements->item(0);
// Remove all child nodes of the selected element
while ($elementToModify->hasChildNodes()) {
$elementToModify->removeChild($elementToModify->firstChild);
}
}
?>
Toevoeging op 08/09/2023 10:56:04:
Ik ben benieuwd of voor het omwisselen van de div elementen een array gebruik kan worden? in de array kun je dan de volgorde aanpassen. maar heb geen idee hoe ik dit dan voor elkaar zou moeten krijgen.Op dit moment heb ik hiervoor ook een klein stukje javascript, echter het wisselen wil ik nu ook in een extern bestand laten plaatsvinden en dat werkt niet als ik de javascript functie laat uitvoeren vanuit een ander bestand. Uiteraard zou ik dan via ajax de gegevens kunnen doorsturen naar een php bestand waar het dan de twee id's van de beide elementen opvang. Vervolgens de volledige inhoud van het externe bestand in een variable zetten, div's laten wisselen en opnieuw opslaan ini het bestand. Zou werken, maar is ook erg omslachtig denk ik.
wil het het liefst wel zo overzichtelijk mogelijk houden ook om als ik onderhoud eraan moet plegen het zelfs voor mij duidelijk blijft.
Gewijzigd op 08/09/2023 11:05:37 door Paul Weiss
Even afgezien van de technische kant van jouw vraag. Wat probeer je eigenlijk te bereiken? Wellicht zijn er andere, handigere mogelijkheden?
dat is best wel een lang verhaal om uit te leggen. Maar kom daar nog op terug.
Het kan een lang verhaal zijn, maar als ik jou was zou ik het toch even proberen uit te leggen. Dan kunnen we gericht meedenken. Een vraag die mij bijvoorbeeld benieuwt, is waarom die rij die je achteraf wil weghalen, er in eerste instantie instaat. Waar komt die rij vandaan?
- Ariën - op 07/09/2023 15:39:57:
Als je jouw divje leeg wilt hebben, dan kan dit op deze manier, nadat je hebt gekeken of het element gevonden is:
Eigenlijk een vervanger van regel 26 (waarbij $divToRemove nu $divToEmpty heet)
Eigenlijk een vervanger van regel 26 (waarbij $divToRemove nu $divToEmpty heet)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
while ($divToEmpty->hasChildNodes()) {
$divToEmpty->removeChild($divToEmpty->firstChild);
}
?>
while ($divToEmpty->hasChildNodes()) {
$divToEmpty->removeChild($divToEmpty->firstChild);
}
?>
veel sneller :)
Jan R op 04/10/2023 11:07:02:
Dat is javascript, en dat doet het niet in PHP.
De vraag is om een string te bewerken. Deze string bevat een stuk html.
Maar het is geen html die in een webpagina staat die bewerkt wordt.
Al is het misschien wel een idee om de bewerkingen in een textarea oid. te doen met behulp van javascript.
Edit:
Geen spam hier, en ook geen verkapte spam door het aanwijzen van een spampost. (die ik verwijderd heb)
Gewijzigd op 13/10/2023 15:23:24 door - Ariën -