hoe element div verwijderen met preg replace

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul Weiss

Paul Weiss

07/09/2023 14:56:11
Quote Anchor link
Hoi. Ik ben al tijdje bezig met preg replace. Maar ik heb geen idee hoe ik het onderstaande voor elkaar moet krijgen! Ik wil graag alles wat staat binnen het div element met id "rij1" verwijderen en ook evt. graag het volledige div element "rij1" op zich verwijderen. Ik heb al van alles geprobeerd. Het lukt mij alleen als ik geen nested div elementen gebruik. Daarvoor gebruik ik deze code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$html = preg_replace('#<div id="rij1">(.*?)</div>#', '', $html);


ik weet niet of dit uberhaupt mogelijk is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$html = '<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>'
 
PHP hulp

PHP hulp

28/04/2024 01:50:46
 
- Ariën  -
Beheerder

- Ariën -

07/09/2023 15:15:56
Quote Anchor link
Zoiets, zonder geklier met reguliere expressies....

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
}

?>
 
Paul Weiss

Paul Weiss

07/09/2023 15:30:53
Quote Anchor link
Erg bedankt hoor. Ik had hiervoor wel een javascript oplossing. echter ik moet het toepassen in een extern bestand. Met preg replace had dat dus nooit gelukt.
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?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<div id="rij1">

</div>


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
 
- Ariën  -
Beheerder

- Ariën -

07/09/2023 15:39:57
Quote Anchor link
De buitenste div bla zou moeten blijven staan. Maar waarom wil je een javascript oplossing?
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
while ($divToEmpty->hasChildNodes()) {
        $divToEmpty->removeChild($divToEmpty->firstChild);
    }

?>
Gewijzigd op 07/09/2023 15:45:17 door - Ariën -
 
Paul Weiss

Paul Weiss

07/09/2023 16:03:46
Quote Anchor link
he arien. bedankt voor je reactie. javasript wil ik zoveel mogelijk vanaf ook. is het dan ook mogelijk om alles binnenin het buitenste div element rij1 te vervangen voor andere content? dus stel ik wil deze vervangen door $nieuw = 'nieuwe content';
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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
Gewijzigd op 07/09/2023 16:08:32 door Paul Weiss
 
Ivo P

Ivo P

07/09/2023 16:55:04
Quote Anchor link
Met een ingewikkelde regex zal het misschien wel kunnen.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>



Toevoeging op 07/09/2023 17:00:53:

en als je div met id = rij1 wilt behouden:

vervang regels 18 / 24 door

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// Find the element with id="rij1"
$elementToKeep = $dom->getElementById('rij1');

// Remove the contents of the element
if ($elementToKeep) {
    while ($elementToKeep->hasChildNodes()) {
        $elementToKeep->removeChild($elementToKeep->firstChild);
    }
}

?>


Toevoeging op 07/09/2023 17:04:21:

en om het met XPath te doen zouden we dat stuk kunnen vervangen door

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }
}

?>
 
Paul Weiss

Paul Weiss

07/09/2023 23:15:14
Quote Anchor link
Hoi Ivo. Heel erg bedankt voor reactie. Ik zal er eens induiken. Best wel complex allemaal. zoveel mogelijkheden ook. Fijn dat ik weer verder ben geholpen door jullie kennis.

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
 
Ozzie PHP

Ozzie PHP

09/09/2023 01:19:59
Quote Anchor link
Even afgezien van de technische kant van jouw vraag. Wat probeer je eigenlijk te bereiken? Wellicht zijn er andere, handigere mogelijkheden?
 
Paul Weiss

Paul Weiss

09/09/2023 14:56:42
Quote Anchor link
dat is best wel een lang verhaal om uit te leggen. Maar kom daar nog op terug.
 
Ozzie PHP

Ozzie PHP

09/09/2023 16:18:28
Quote Anchor link
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?
 
Paul Weiss

Paul Weiss

03/10/2023 12:11:05
Quote Anchor link
Hoi Ozzie. Ik zou hierop nog reageren. Als gebruiker kun je kiezen uit verschillende html blokken. elk blok is anders dan de andere. zo heb ik een html hero met aan afbeelding op de achtergrond , een html met formulier, een html blok met een afbeelding en daarnaast wat tekst etc. etc.. de html blokken komen onder elkaar te staan. de gehele html code wordt in een bestand opgeslagen. elk html heeft ook een uniek id nummer. dit is belangrijk omdat een blok ook verwijderd moet kunnen worden of omgewisseld moet kunnen worden met eentje daarboven. een html blok ziet er dan bijv. als onderstaande uit (wel versimpeld uiteraard). Het bestand wordt overigens apart ingelezen in een php bestand waar ik de mogelijkheid heb om dus een blok te verwijderen en of te verwisselen en/of andere functies op te roepen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<div id="blok1">
<h1>dit hoort bij blok 1</h1>
</div>
<div id="blok2">
<p>deze tekst  hoort bij blok 2</p>
<p>dit hoort ook bij blok 2</p>
</div>
<div id="blok3">
<h1>dit hoort bij blok 3</h1>
</div>
 
Jan R

Jan R

04/10/2023 11:07:02
Quote Anchor link
- 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)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
while ($divToEmpty->hasChildNodes()) {
        $divToEmpty->removeChild($divToEmpty->firstChild);
    }

?>


veel sneller :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
document.getElementById("elemID").innerHTML="";
 
Ivo P

Ivo P

04/10/2023 11:56:56
Quote Anchor link
Jan R op 04/10/2023 11:07:02:
veel sneller :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
document.getElementById("elemID").innerHTML="";


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.
 
Marko Cheeni

Marko Cheeni

13/10/2023 15:02:40
Quote Anchor link
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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.