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
<(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:
<([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:

Content = document.getElementById('container').innerHTML;
Majd ebből kellene kitörölni azt, amelyiknek pl.: item8 az id-je!

//Minta = minta létrehozása a regexp-el és NewContent = Contnet - Minta
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?
var item8Node = document.getElementById("item8");
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!

var parent = document.getElementById("content");
var itemNode = document.getElementById("item8");
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.

var item8Node = document.getElementById("item8");
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)

// divId = a törlendő div id-je
// removeDivDom('item8');
function removeDivDom(divId) {
  // feltételezzük, hogy mindig a container id-jű divből akarsz törlni objektumot
  var cont = document.getElementById('container');
  var div = document.getElementById(divId);
  if(div) cont.removeChild(div);
  return true;
}
Másrészről, ha mégis innerHTML+regexp, akkor a következő megoldást javasolnám:

// divId = a törlendő div id-je
// removeDiv('item8');
function removeDiv(divId) {
	var container = document.getElementById('container');
	var cont = container.innerHTML;
	var r = new RegExp('<(div) id="?'+divId+'"?>[^<]+<\/div>', 'i')
	container.innerHTML = cont.replace(r, '');
	return true;
}
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?