ugrás a tartalomhoz

Mintaillesztés JavaScriptben HTML tagekre

s_volenszki · 2006. Okt. 14. (Szo), 18.55
Sziasztok!

Tudna nekem valaki javasolni valami doksit (akár angol is lehet) javascript Regexp minta készítéséhez? Konkrétan html tag-ekre kihegyezve!

s_volenszki
 
1

HTML regexp

Ajnasz · 2006. Okt. 14. (Szo), 21.48
  1. <(h1|h2|h3|p|a|b|i|strong)( (class|name|value|id)="[a-z]+")*>[^<]+<\/\1>  
(h1|h2|h3...) ban fel lehetne sorolni az összes html taget, (class|name|value...) -ban pedig az összes html attribútumot.
Helyettük lehet egy általánosabbat:
  1. <([a-z]+)( ([a-z])="[a-z]+")*>[^<]+<\/\1>  
RegExp doksikért ajánlom a keresőt.
2

Regexp

s_volenszki · 2006. Okt. 14. (Szo), 21.57
Szia!

Az a helyzet, hogy azt már kiturkáltam a gugliból, hogy ha a keresett tag a div, akkor a minta: <div\b[^>]*>(.*?)</div>

A probléma az, hogy nekem az id-je szerint kellene megtalálni, azaz, ebbe a mintába még belekllene kombinálni azt hogy pl.: id="item1"!

Van ötleted?

s_volenszki
3

Mit szeretnél?

Ajnasz · 2006. Okt. 14. (Szo), 22.15
Ha egy elemet az id-je szerint szeretnél azonosítani, akkor document.getElementById('div id-je') függvényt használd.
Egyéb esetben inkább mondd el, hogy pontosabban mit szeretnél, úgy könnyebb segíteni.
4

innerHTML

s_volenszki · 2006. Okt. 15. (V), 08.36
Helóka!

Egy div innerHTML tartalmával dolgozok, a célja az, hogy div layoutot készítsek drag and resize eljárással. Minden jól működik, és eljutottam oda, hogy ha mégsem kell egy div, akkor törölni kell. Kiveszem a szerkesztő div tartalmát:
  1. Content = document.getElementById('container').innerHTML;  
Majd ebből kellene kitörölni azt, amelyiknek pl.: item8 az id-je!
  1. //Minta = minta létrehozása a regexp-el és NewContent = Contnet - Minta  
  2. document.getElementById('container').innerHTML = NewContent;  
Szóval itt a document.getElementById('item8') nem sokra vezet! Vagy te tudsz vamait?

s_volenszki
5

removeChild?

Jano · 2006. Okt. 15. (V), 10.56
DOM-os removeChild nem jó megoldás?
  1. var item8Node = document.getElementById("item8");  
  2. item8Node.parentElement.removeChild(item8Node);  
6

removeChild

s_volenszki · 2006. Okt. 15. (V), 11.20
Firefox nem akarja, különben nagyon exelent!

Ötlet?

s_volenszki

ui.:

Bocsi, firefoxnak kellet a parent is!
  1. var parent = document.getElementById("content");  
  2. var itemNode = document.getElementById("item8");  
  3. parent.removeChild(itemNode);  
8

parentElement helyett parentNode

Jano · 2006. Okt. 15. (V), 11.30
Bocs! Ezt mindig elkeverem és most voltam olyan lusta és nem próbáltam ki, parentElement helyett parentNode-ot kell használni.
  1. var item8Node = document.getElementById("item8");  
  2. item8Node.parentNode.removeChild(item8Node);  
7

removeChild

Ajnasz · 2006. Okt. 15. (V), 11.22
DOM-ból egyszerűbb törölni, főleg, ha tudod az adott div id-jét.
(Közben Jano már írta ezt a módszert)
  1. // divId = a törlendő div id-je  
  2. // removeDivDom('item8');  
  3. function removeDivDom(divId) {  
  4.   // feltételezzük, hogy mindig a container id-jű divből akarsz törlni objektumot  
  5.   var cont = document.getElementById('container');  
  6.   var div = document.getElementById(divId);  
  7.   if(div) cont.removeChild(div);  
  8.   return true;  
  9. }  
Másrészről, ha mégis innerHTML+regexp, akkor a következő megoldást javasolnám:
  1. // divId = a törlendő div id-je  
  2. // removeDiv('item8');  
  3. function removeDiv(divId) {  
  4.     var container = document.getElementById('container');  
  5.     var cont = container.innerHTML;  
  6.     var r = new RegExp('<(div) id="?'+divId+'"?>[^<]+<\/div>''i')  
  7.     container.innerHTML = cont.replace(r, '');  
  8.     return true;  
  9. }  
Saját kérdésem
A második példát tesztelve kiderült, hogy élesben a visszautalás nem akar működni (<\/\1>), de akkor hogyan lehet ugyanazon reguláris kifejezésen belül hivatkozni az előzőleg már gyűjtött illesztéskre?