Page 1 sur 1

problème avec split pour syntaxe sur un operateur ternaire

Posté : 06 mai 2008, 23:17
par BeRoots
salut tout le monde :)

j'ai un soucis sur un travail sur chaine via split()...
je fait ceci via un opérateur ternaire afin de détecter si présence de "BRTS" dans une chaine. Si c'est le cas, on doit splité la chaine et en extraire la partie entre les caractère "BRTS" :-k
voici la chaine réel en html:
<a href="./path/file.jpg" title="Menu navigation :: Mode plein &eacute;cran<span style='display:none;'>BRTSici la chaine à retourner
 via le splitBRTS</span>">&nbsp;</a>
voici l'operateur ternaire en JS:
title: (link.getAttribute('title').search(/BRTS/) != -1) ? link.getAttribute('title').split("BRTS")[1] : link.getAttribute('title'),
mon soucis est que ma var title est vide lorsque "BRTS" est detecté :?
Si quelqu'un a une idée ;)
Merci d'avance.

Posté : 07 mai 2008, 09:04
par Truc
manque peut être des bouts de code (début, fin) non ?

une affectation avec ":" et une fin d'instruction avec "," :-k

Et sinon pourquoi ne pas utiliser un masque qui te récupère directement ce qu'il y a entre BRTS style
search(/BRTS(.*)BRTS/)

Posté : 07 mai 2008, 10:46
par BeRoots
une affectation avec ":" et une fin d'instruction avec "," :-k
J'ai allégé à l'extrême mais un peu trop peut être :?
voici ce que j'ai essayé mais mon title reste toujour indefinit :-k
        var o = {
            el:         link,
            title:      (link.getAttribute('title').search(/BRTS/) != -1) ? link.getAttribute('title').match("BRTS(.*)BRTS") : link.getAttribute('title'),
            type:       getPlayerType(href),
            options:    apply({}, opts || {}), // break the reference
            content:    href
        };

si quelqu'un à une idée ;)

PS:
Et sinon pourquoi ne pas utiliser un masque qui te récupère directement ce qu'il y a entre BRTS style
search(/BRTS(.*)BRTS/) 
c'est plutôt match() dans ce cas car search() revoit la position de l'occurence sur chaine ;)

Posté : 07 mai 2008, 11:00
par Truc
PS:
Et sinon pourquoi ne pas utiliser un masque qui te récupère directement ce qu'il y a entre BRTS style
search(/BRTS(.*)BRTS/) 
c'est plutôt match() dans ce cas car search() revoit la position de l'occurence sur chaine ;)
Ha oui trop pressé... :)
et donc pourquoi pas ?

affiche déjà le résultat retourné par l'opérateur ternaire

Posté : 07 mai 2008, 11:06
par BeRoots
en fait mon ternaire fonctionne pas on dirai :?

en gros j'ai essayé ceci mais rien n'est affecter à title:
var o = {
            el:         link,
            title:      (link.getAttribute('title').search(/BRTS/) != -1) ? link.getAttribute('title') : link.getAttribute('title'),
            type:       getPlayerType(href),
            options:    apply({}, opts || {}), // break the reference
            content:    href
        };
c'est donc un mystère...
une idée peu être? :)

Posté : 07 mai 2008, 11:24
par Ryle
Et avec des parenthèses autour de ton ternaire pour que javascript ne s'intérroge pas sur les ":" qu'il va trouver en plein milieu de l'instruction, alors qu'il pensait les avoir déjà trouvé après "title:"

Code : Tout sélectionner

title: ( (link.getAttribute('title').search(/BRTS/) != -1) ? link.getAttribute('title').match("BRTS(.*)BRTS") : link.getAttribute('title') ),

Posté : 07 mai 2008, 12:30
par BeRoots
j'ai bien essayer mais rien de mieux et mon title renvoi toujour:
link.getAttribute("title") has no properties

Posté : 07 mai 2008, 13:54
par Ryle
et euh.... que donne un :

Code : Tout sélectionner

alert(link); alert(link.getAttribute('title'));
Euh... sinon à priori, je dirais que c'est parce que ton code html il est tout cracra... si ton title doit effectivement contenir toute cette vilaine chaine qui s'affichera lorsque l'utilisateur passera sa souris sur ton espace, alors il faut l'htmlentitieser ou au moins remplacer les < > au profit de < >

Posté : 07 mai 2008, 14:38
par BeRoots
en gros j'utilise les tips de mootools pour faire de la bulle...
en parallèle j'utilise un lightbox qui me titre l'image via title...

en gros l'objectif est simple...
J'ai ceci au depart dans mon html au cas ou JS est désactivé:
<a href="./path/file.jpg" title="Menu navigation :: Mode plein &eacute;cran">&nbsp;</a>
au domready, si JS activé, je remplace ce title par celui-ci afin de ne pas voir la partie issue de db dans la bulle:
<a href="./path/file.jpg" title="Menu navigation :: Mode plein &eacute;cran<span style='display:none;'>BRTSici la chaine à retourner
 via le splitBRTS</span>">&nbsp;</a>
par contre lorsque l'on appel le lightbox, on doit avoir uniquement la partie qui concerne le titre pour l'image cible sans les infos pour la bubble à mootools. c'est donc dans le JS de mon lightbox que je souhaite modifier la façon qu'il récupère le title via mon opérateur ternaire.
Donc ceci:
var o = {
            el:         link,
            title:      (link.getAttribute('title').search(/BRTS/) != -1) ? link.getAttribute('title') : link.getAttribute('title'),
            type:       getPlayerType(href),
            options:    apply({}, opts || {}), // break the reference
            content:    href
        };
Le code par default pour le lightbox est le même sans le ternaire:
var o = {
            el:         link,
            title:      link.getAttribute('title'),
            type:       getPlayerType(href),
            options:    apply({}, opts || {}), // break the reference
            content:    href
        };
j'ai essayer Les alert();
alert(link) => url du lien utiliser pour lightbox
alert(link.getAttribute('title')) => null

Pas moyen de savoir pourquoi mais cela fonctionne via le JS par default mais pas avec le ternaire car ça condition echoue vu que link.getAttribute('title'); renvoi null...

merci d'avance :)

Posté : 08 mai 2008, 18:26
par BeRoots
oki... j'ai fini par comprendre :)

en fait mon Tips de mootools pour les bulle efface les attribut title de mes liens donc ma var title devient null et donc mon lightbox ne peut exploiter les titles en questions...

je n'ai pas trouver de moyen de faire en sorte de ne pas supprimer les titles car en fait mootools les supprime pour ne pas avoir et les bulles navigateur et ces propres bulles à l'affichage. logique :roll:

je vait voir pour mettre mes title en attribut name plutot que de les effacer...

sinon pour ce qui est de l'opérateur ternaire, la syntaxe etait au top ;)