Gå til innhold

Fjerne <br> mellom <ul> og </ul>


Anbefalte innlegg

Bruker FCKeditor (en WYSIWYG-editor) på siden min, men er en liten svakhet i den.

 

Om jeg skal ha en UL-liste som denne:

Overskrift

<ul>

<li>Liste</li>

<li>Liste</li>

</ul>

 

Blir HTMLen slik:

Overskrift<br />

<ul><br />

<li>Liste</li><br />

<li>Liste</li><br />

</ul>

 

Ønsker å fjerne ALLE <br /> fra oversriften og fra <ul> til </ul>

Noen som har noen tips til "angrepstaktikk" på dette problemet?

 

Edit:

Må bare nevne at hele innholdet i tekstboksen er $text og jeg skal ikke fjerne alle <br /> fra $text, bare de i listen. ;)

Endret av ZoRaC
Lenke til kommentar
Videoannonse
Annonse

Det er helt feil

ul står for unordered list, mens ol står for ordered list.

ol brukes når du skal ha:

  1. Én
  2. To
  3. Tre

  1. Én
  2. To
  3. Tre

  1. Én
  2. To
  3. Tre

mens ul brukes for slike lister:

  • Én
  • To
  • Tre

 

Jeg har dessverre ikke noen god løsning på problemet i første posten, annet enn å gjøre de som har laget WYSIWIG-editoren oppmerksomme på problemet, for det der er feil kode. (Kan aldri i verden tenke meg at den er i nærheten av å validere)

Endret av Nazgul
Lenke til kommentar

Nazgul:

Er en lang liste med små bugs i editoren, og utviklerene har begrenset tid til å rette alle.

 

Trenger en workaround i mellomtiden. ;)

 

Ser for meg noe slikt (pseudokode):

$startline = linjenummer for <ul>
fjern siste <br /> fra $startline-1
$endline = linjenummer for </ul>
fjern siste <br /> på alle linjer mellom $startline og $endline

 

Noen som er "drevne" på bruk at disse funksjonen? Har ikke så mye kjennskap til hvilke jeg må bruke... :(

Lenke til kommentar

To linjer kode som fikser det...

 

<? # Variabelen som inneholder sjit som skal renskes opp er $streng
 $streng = explode("<br>", $streng);
 $streng = implode("", $streng);
?>

 

Forresten, siste utgave av FCKeditor legger ikke inn <br>...

Endret av spiffers
Lenke til kommentar
To linjer kode som fikser det...

 

<? # Variabelen som inneholder sjit som skal renskes opp er $streng
 $streng = explode("<br>", $streng);
 $streng = implode("", $streng);
?>

 

Forresten, siste utgave av FCKeditor legger ikke inn <br>...

6165967[/snapback]

 

Problemet da er at den fjerner ALLE <br> i $text, de som er over/under <ul>-listen også. :(

 

Har satt FCKeditor til å sette inn <br> ved linjeskift i stedet for å bruke <p> for da blir linjeavstanden "dobbel" når man trykker <enter>...

Lenke til kommentar

Denne sletter alle <br /> mellom <ul> og </ul> og etter overskrift, men tar ikke høyde for "nestede" lister:

$text = preg_replace("/<br \/>(?=\s*<ul>)|<br \/>(?=(?:(?!<ul>).)*<\/ul>)/s","",$text);

Denne sletter alle <br /> etter </li>,<ul> og overskrift, men ikke alle mellom <ul> og </ul>. Det kan jo være ønskelig med linjeskift mellom <li> og </li>:

$text = preg_replace("/<br \/>(?=\s*<ul>)|(?<=<ul>)<br \/>|(?<=<\/li>)<br \/>/s","",$text);

Lenke til kommentar

Takk stiber!

Samme med "ul { display: list-item }" ble det akkurat slik jeg ønsket! :D

 

Drev å prøvde meg litt frem jeg også, og fikk til en fungerende kode for 15 min siden, men dine var jo mye enklere enn min:

$remove_str = "<br />";
$str_len = strlen($remove_str);

$start = strpos($text, '<ul>') - $str_len - 1; 
$end = strpos($text, '</ul>'); 

$remove = substr($text, $start, $end - $start); 
$removed = str_replace($remove_str, '',  $remove); 
$text = str_replace($remove, $removed,  $text);  

 

Btw,

prøvde begge kodene dine, men ser ikke noe forskjell?

Lenke til kommentar
Har satt FCKeditor til å sette inn <br> ved linjeskift i stedet for å bruke <p> for da blir linjeavstanden "dobbel" når man trykker <enter>...

6167698[/snapback]

Linjeavstanden til en <p> er jo fryktelig lett å endre ved hjelp av CSS, så jeg kan ikke skjønne hvorfor du erstatter <p> (som er helt riktig) med <br> (som er helt feil).
Lenke til kommentar

Vet ikke om man kan endre hvordan <p> skal oppføre seg i redigerings-feltet til FCKeditor? De som skal bruke dette kan null HTML og det er derfor viktig at artikkelen blir seende ut som den gjør under redigering, og brukerne forventer at man flytter seg en linje i gangen når man trykker <enter>, som i Word...

 

Men, om man kan få den til å flytte seg "normalt" i FCKeditor er det seff ingen grunn til å ikke bruke <p>... ;)

Lenke til kommentar

<br> er linjeskift, <p> er paragraf. De har forskjellig funksjonalitet.

<p> er to linjeskift fordi det er slik du deler inn paragrafer, dvs. én blank linje imellom paragrafene, mens <br/> kun er linjeskift for å kunne bryte opp en tekst.

 

Av den grunn har du heller ikke lov til å putte <br /> utenfor et blokkelement.

 

Eks.:

http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_br

Endret av Nazgul
Lenke til kommentar
og brukerne forventer at man flytter seg en linje i gangen når man trykker <enter>, som i Word...

6194020[/snapback]

Når man trykker <enter> i Word, skifter man faktisk avsnitt. Hvis man bare skal skifte linje, trykker man <shift>+<enter>.

Det er bare det at Word ikke har lagt inn ekstra avstand mellom avsnittene som standard for at det skal være enklere å bruke for nybegynnerene.

Når man skriver en tekst, skal man faktisk ikke trykke <enter> andre ganger enn når man skifter avsnitt (selv om man på barneskolen lærer å begynne ny setning på ny linje :roll: ).

Hvis du går inn i Word og skriver litt forskjellig der du veksler mellom å bruke <enter> og <shift>+<enter>, og deretter går på Format -> Avsnitt og setter avstand etter, så vil du se forskjellen mellom linjeskift og avsnittsskift.

 

endrebjorsvik:

Hvordan endrer man til "normal" linjeavstand med CSS? :)

6239312[/snapback]

p {
 line-height: 1.5em;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...