Autor Zpráva
Plom
Profil *
Dobrý den, před asi měsícem mi zde byl upraven skript (díky losovi), který odkazům mimo doménu přidá třídu a target.

Skript funguje bezvadně, ale asi měsíc jsem zkoušel přijít na to, jak tento skript upravit, aby opomíjel odkazy jako:

<a href="javascript:


a

<a href="mailto:


Moje pokusy (např. se zapojením skriptů ověřující správný formát emailu) byly bezvýsledné, a na netu jsem bohužel pro mě nenašel nic, čeho bych se mohl chytit - snad jen se naučit celý javascript... Prakticky jsem ani nanašel, jak v js definovat email a "javaskriptový"odkaz.

Nejlepší by bylo, kdyby skript neotevírál do nového okna a nepřidával třídu external odkazům obsahující právě slova mailto a javascript.

Skript je pro mě moc důležitý a myslím si, že by našel široké využití i na jiných webech.

window.onload = function() {
	var currentHostname = location.hostname.replace(/^www\./, "$1");
	var hostnames = [currentHostname, "mojadalsiadomena.cz"];
	var dictionary = {};
	
	for (var i = 0, len = hostnames.length; i < len; ++i)
	    dictionary[hostnames[i]] = true;
	
	for (var i = 0, anchors = document.getElementsByTagName("a"), anchor; anchor = anchors[i]; ++i) {
		var match = anchor.href.match(/^https?:\/\/(?:www\.)?(.*?)\//);

		if (!match || !dictionary[match[1]]) {
		    anchor.target = "_blank";
		    anchor.className = "external";
		}
	}
};
peta
Profil
Plom
Jinymi slovy ses liny a vsechno, co jsi prave napsal mi prijde jako politicke kecy ze kterych jasne plyne, ze ses ani nepokusil. Priste to zkus formulovat dukladneji.

anchors = document.getElementsByTagName("a")
... pole vsech prvku s nazvem tagu "A"

/^https?:\/\/(?:www\.)?(.*?)\//);
... regularni vyraz, ktery resi jestli je tam URL nebo neco jineho; dost ocesany od realnych moznosti url adresy, ale budiz

var match = anchor.href.match(regularni_vyraz)
... funkce, ktera hleda shodu

Cili cely script se napadne podoba prikladu
jakpsatweb - javascript - priklady - regularni vyraz

Jinymi slovy, pro mail je treba pouzit jiny regularni vyraz, ktery hleda jinou shodu.
Jak sestavit regularni vyraz? Podobne jako v PHP nebo jinem programovacim jazyce. literatura:
http://www.volny.cz/peter.mlich/www.htm#main7

cili pod radky:
if (!match || !dictionary[match[1]]) {
anchor.target = "_blank";
anchor.className = "external";
}
napises:
var reg = /.........../; //tvuj novy reg vyraz pro mail
match = anchor.href.match(reg)
if (match) {anchor.className = "mail";}

A jestli chces overovat pravost emailu, tak ten reg. vyraz bude jinak a podminka bude not match, podobne jako v puvodnim scriptu
if (!match) {anchor.className = "mail";}

3 radky, take jednoduche. Kdybys to fakt zkousel, fakt bys na to prisel uplne snadno.

"snad jen se naučit celý javascript"
co ti brani? umis nejaky programovaci jazyk? urcite se nauc zaklady, bude se ti to hodit. Zaklady jsou otazkou 30ti minut a cas cloveka, co to umi. Pripadne muzes zkusit knizku. Kdyz to podle ni dokaze astrofyzicka, odbornice na cerne diry, prece bys nechtel tvrdit, ze ses horsi nez zena.
Plom
Profil *
Už jsem myslel, že se odkazu na tvůj webík nedočkám :-)

Předchozí příspěvek jsem napsal tak, aby jej pochopil úplně každý a slovo lenost mě napadlo snad jen při pročítání tvého životopisu a tvých rad tady na fóru (když asi nedočítáš příspěvky a rovnou do políčka pro odpověď vkládáš nesmyslné odkazy spolu s výtkou, že nechápeš text tazatele).

Děkuji ale moc za nápovědu, díky níž jsem to spolu s notnou dávkou štěstí nakonec dal dohromady.

Určitě to jde udělat i jinak, ale nehodlám na rozdíl od jiných strávit před monitorem čtením návodů celý život nebo si kupovat kvůli drobné úpravě skriptu knížku. Měl jsem tu smůlu, že regulerní výrazy nepatří mezi základy a tak bych chtělo daleko více než 30 minut. Žádný programovací jazyk neovládám, umím html+css a studuji jen astrofyzičky a černé díry.

window.onload = function() {
	var currentHostname = location.hostname.replace(/^www\./, "$1");
	var hostnames = [currentHostname, "mojadalsiadomena.cz"];
	var dictionary = {};
	
	for (var i = 0, len = hostnames.length; i < len; ++i)
	    dictionary[hostnames[i]] = true;
	
	for (var i = 0, anchors = document.getElementsByTagName("a"), anchor; anchor = anchors[i]; ++i) {
		var match = anchor.href.match(/^https?:\/\/(?:www\.)?(.*?)\//);

		if (!match || !dictionary[match[1]]) {
		    anchor.target = "_blank";
		    anchor.className = "external";
		}
        var reg = /[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}|javascript/;
        match = anchor.href.match(reg)
        	if (match) {
		    anchor.target = "_self";
		    anchor.className = "mail-javascript";
		}
	}
};
peta
Profil
Plom
:)
Na foru jsou pouze 2 moznosti. Odkazat na text, odkazy. Nebo to z te stranky zkopirovat do fora. Co ti prijde lepsi?
Zvlast, kdyz se lide obvykle ptaji na to, co je popsane na jakpsatweb.cz .
Ony ty odkazy nejsou nesmyslne. Spis jde o lenost v pochopeni, co tam vlastne je.
Kdyz se clovek zepta, proc mu nejde vybirat selectem v JS a ja ho odkazi na jakpsatweb - javascript - priklady - formulare, kde je priklad Select zpusobi prechod na jinou stranku, tak predpokladam, ze se tovtipi, ze ten select ma chybne zapsany. Navic mu to obvykle reknu. A ze bude jednodussi upravit ten priklad, kde je jen 10 radku proti jeho 100k strance.

Mno, ber to tak, ze kdyz jsi to udelal sam podle navodu na reg. vyrazy, tak mas z toho vetsi radost. A nestalo te to ani korunu. Z tveho prispevku totiz jasne vyplyva, ze neco moc potrebujes a ze to neumis a mame za tebe pracovat. Pak se nediv, ze ti rovnou rikam, zapomen :)
TSD
Profil
peta
Rady typu jpw - javascript - priklady - formulare tady praktikuješ jenom ty a už jsi byl i upozorněn na to, že to nemáš dělat a proč.

Tvoje příspěvky se skládají z podobných "rad", arogantních výpadů a linků na tvůj web. Zapomněl jsem na něco? Chápu, že jpw je pro tebe cenným zdrojem návštěv, ale nechtěl bys za to pro tu diskusi taky něco udělat?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0