Nekorektní řetězcové operace /nebo překlep/ – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nekorektní řetězcové operace /nebo překlep/ – JavaScript, AJAX, jQuery – Fórum – Programujte.comNekorektní řetězcové operace /nebo překlep/ – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Petroff0
Věrný člen
6. 9. 2007   #1
-
0
-

V dokumentu mám zmenšený obrázek: <img id="img_1A" width="300" src="http://....kal1a.jpg" />
a v menu 2 odkazy:
1. Najede na obrázek (bez JS): <a href="#img_1A">small</a>
2. Otevře okno s originálem: <a href="#img_1A"
onclick='return !window.open(document.getElementById(this.href.match(/#.+/).substring(1)).src,"_blank")' >big</a>


Evidentně mám všechno v cajku - testoval jsem:

this.href --> "file://localhost/C:/WWW,%20js%20%26%20html/FORUM/2float%20rolovaci/html_fixed.html#img_1A"
this.href.match(/#.+/) --> "#img_1A"

No a substring, getElementById, w.open znám jak své boty; přesto to nešlape - že by DEN BLBEC ???

Nahlásit jako SPAM
IP: ...–
Prog.0
Věrný člen
7. 9. 2007   #2
-
0
-

Tak som na to mrkol, a prišiel som na to, že typeof String.match(..) ==> object, a nie string !!! (lebo môže vrátiť aj null)

alert( typeof 'abc'.match(/b/) );


[podtrzene]takže to treba previesť na string:[/podtrzene]
String(this.href.match(/#.+/)).substring(1);

(""+this.href.match(/#.+/)).substring(1);


Nahlásit jako SPAM
IP: ...–
Prog.
Petroff0
Věrný člen
7. 9. 2007   #3
-
0
-

Díky za vysvětlení, já jsem to sice nakonec "přinutil" fungovat:

function ukaz(a){ a=a.href.match(/#.+/)+""; a=document.getElementById(a.substring(1)); return !window.open(a.src,"_blank") }

Ale nenapadlo mě proč tomu tak je => konzole mě zblbla tím vypsaným řetězcem.
Taky dík za odkaz na prima web Essential Javascript -- A Javascript Tutorial
Dobře se s ním pracuje [ :-( bohužel JS specifikace to není a u metody match se hovoří jen o řetězcových fn.hodnotách ]

ANI NA: http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:match
SE NEUMĚJÍ JASNĚ VYJÁDŘIT:

match(regexp) [podtrzene]Description[/podtrzene]
If the regular expression does not include the g flag, returns the same result as regexp.exec(string).
If the regular expression includes the g flag, the method returns an Array containing all matches.


STAČILO BY ŘÍCT, ŽE FUNKCE VRACÍ Array S VÝSLEDK(Y/EM) ANEBO null

alert( 'abc'.match(/b/) instanceof Array ) --> true
_________________________________________________________________________________
Takže lze také: this.href.match(/#.+/)[0].substring(1)
popř: this.href.match(/#.+/).toString().substring(1)
_________________________________________________________________________________
Výsledek se dá získat i bez substring(1): this.href.match(/#(.+)/)[1]
Nebo: this.href.replace(/.*#/,"")

Nahlásit jako SPAM
IP: ...–
Prog.
~ Anonymní uživatel
398 příspěvků
10. 9. 2007   #4
-
0
-

Ja som skúsil typeof 'abc'.match('b') a vyhodilo mi to object, tak som ďalej neskúmal.

Ale ako tak čítam:

ANI NA: developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:String:match
SE NEUMĚJÍ JASNĚ VYJÁDŘIT:

match(regexp) [podtrzene]Description[/podtrzene]
If the regular expression does not include the g flag, returns the same result as regexp.exec(string).
If the regular expression includes the g flag, the method returns an Array containing all matches.



Tak som mrkol na http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:RegExp:exec
a je to tam čierne na bielom:

If the match succeeds, the exec method returns an array and updates properties of the regular expression object. If the match fails, the exec method returns null.

Takže to súhlasí s

Petroff píše:#
# STAČILO BY ŘÍCT, ŽE FUNKCE VRACÍ Array S VÝSLEDK(Y/EM) ANEBO null



Potvrdzuje to aj ECMA-262, Edition 3

http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf (strana 102)

15.5.4.10 String.prototype.match (regexp)
If regexp is not an object whose [[Class]] property is "RegExp", it is replaced with the result of the expression new RegExp(regexp). Let string denote the result of converting the this value to a string. Then do one of the following:
• If regexp.global is false: Return the result obtained by invoking RegExp.prototype.exec (see 15.10.6.2) on regexp with string as parameter.
• If regexp.global is true: Set the regexp.lastIndex property to 0 and invoke RegExp.prototype.exec repeatedly until there is no match. If there is a match with an empty string (in other words, if the value of regexp.lastIndex is left unchanged), increment regexp.lastIndex by 1. Let n be the number of matches. The value returned is an array with the length property set to n and properties 0 through n–1 corresponding to the first elements of the results of all matching invocations of RegExp.prototype.exec.


http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf (strana 144)

15.10.6.2 RegExp.prototype.exec(string)
Performs a regular expression match of string against the regular expression and returns an Array
object containing the results of the match, or null if the string did not match



BTW: Nemožem sa prihlásiť :-(

Nahlásit jako SPAM
IP: ...–
Petroff0
Věrný člen
14. 9. 2007   #5
-
0
-

ECMA-262.PDF je fakt vynikající.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý