OVH Cloud OVH Cloud

.split("/")

5 réponses
Avatar
kael
Bonsoir,

A partir d'un groupe de strings du type aaa/bbb/ccc/ddd, je souhaite
afficher quelque chose qui ressemblerait à ça:

<a href"=http://foo.org> aaa </a>
<a href"=http://foo.org/bbb> bbb </a>
<a href"=http://foo.org/bbb/ccc> ccc </a>
<a href"=http://foo.org/bbb/ccc/ddd> ddd </a>

<a href"=http://foo.org> aaa </a>
<a href"=http://foo.org/ggg> ggg </a>
<a href"=http://foo.org/ggg/hhh> hhh </a>
etc...

Apparemment, je dois utiliser .split("/") mais ne suis pas très fort
pour écrire des boucles (désolé pour le vocabulaire approximatif, je
débute). Pourriez-vous svp me guider ?

Merci pour votre aide.

--
kael

5 réponses

Avatar
ASM
kael wrote:
Bonsoir,

A partir d'un groupe de strings du type aaa/bbb/ccc/ddd, je souhaite
afficher quelque chose qui ressemblerait à ça:

<a href"=http://foo.org> aaa </a>
<a href"=http://foo.org/bbb> bbb </a>
<a href"=http://foo.org/bbb/ccc> ccc </a>
<a href"=http://foo.org/bbb/ccc/ddd> ddd </a>

<a href"=http://foo.org> aaa </a>
<a href"=http://foo.org/ggg> ggg </a>
<a href"=http://foo.org/ggg/hhh> hhh </a>
etc...

Apparemment, je dois utiliser .split("/") mais ne suis pas très fort
pour écrire des boucles (désolé pour le vocabulaire approximatif, je
débute). Pourriez-vous svp me guider ?


Les bases :
truc = new Array('aaa','bbb','ccc','ddd');

bidule = truc.join(',')
nous donne : 'aaabbbcccddd'

truc = 'aaa/bbb/ccc/ddd';
U = truc.split('/');
nous donne un nouvel array : ('aaa','bbb','ccc','ddd')

Solution de l'exo :

<html>
<script type="text/javascript">
truc = 'aaa/bbb/ccc/ddd';
function ecritureUrls(serveur,chaine){
var e1 = '<p><a href="http://'+serveur;
var texto = '';
var U = chaine.split('/');
texto = e1+'">'+U[0]+'</a>';
for(var i=1;i<U.length;i++) {
texto += e1+'/'+U[i]+'">'+U[i]+'</a>';
}
return texto;
}
</script>

<input type=button value="Ecrire liens"
onclick="document.body.innerHTMLìritureUrls('foo.org',truc);">
</html>

--
Stephane Moriaux et son [moins] vieux Mac

Avatar
Cenekemoi
Bonjour à ASM qui nous a
(...)
Les bases :
truc = new Array('aaa','bbb','ccc','ddd');


ou : truc = [ 'aaa','bbb','ccc','ddd' ];

bidule = truc.join(',')
nous donne : 'aaabbbcccddd'


Attention :
truc.join(',') ==> 'aaa,bbb,ccc,ddd'

De même :
truc.join('/') ==> 'aaa/bbb/ccc/ddd'
truc.join(' ') ==> 'aaa bbb ccc ddd'
truc.join('') ==> 'aaabbbcccddd'

truc = 'aaa/bbb/ccc/ddd';
U = truc.split('/');
nous donne un nouvel array : ('aaa','bbb','ccc','ddd')


Là, rien à dire...

--
Cordialement, Thierry ;-)

Avatar
kael
ASM wrote:

Les bases :
truc = new Array('aaa','bbb','ccc','ddd');

bidule = truc.join(',')
nous donne : 'aaabbbcccddd'

truc = 'aaa/bbb/ccc/ddd';
U = truc.split('/');
nous donne un nouvel array : ('aaa','bbb','ccc','ddd')

Solution de l'exo :

<html>
<script type="text/javascript">
truc = 'aaa/bbb/ccc/ddd';
function ecritureUrls(serveur,chaine){
var e1 = '<p><a href="http://'+serveur;
var texto = '';
var U = chaine.split('/');
texto = e1+'">'+U[0]+'</a>';
for(var i=1;i<U.length;i++) {
texto += e1+'/'+U[i]+'">'+U[i]+'</a>';
}
return texto;
}
</script>

<input type=button value="Ecrire liens"
onclick="document.body.innerHTMLìritureUrls('foo.org',truc);">
</html>


Merci beaucoup pour cet exemple. Ca s'approche substantiellement de ce
que je souhaite afficher.

Les urls affichées sont du type:

<a href="http://foo.org">aaa</a>
<a href="http://foo.org/bbb">bbb</a>
<a href="http://foo.org/ccc">ccc</a>
<a href="http://foo.org/ddd">ddd</a>

Et je souhaite afficher le chemin complet:

<a href="http://foo.org">aaa</a>
<a href="http://foo.org/bbb">bbb</a>
<a href="http://foo.org/bbb/ccc">ccc</a>
<a href="http://foo.org/bbb/ccc/ddd">ddd</a>

Voici un morceau de script:

// fonction qui permet de créer un lien

function createLink(href, txt) {
var link = document.createElement('a');
link.setAttribute('href', href);
//link.appendChild(document.createTextNode(txt));
link.innerHTML = txt;
return link;
}

// <snip>

title = link[i].getElementsByTagName('title')[0].textContent;

// avec title = ['aaa/bbb/ccc/ddd','eee/fff','ggg/hhh/iii', etc.]

var urlTitle // et je cherche à définir 'urlTitle'

var liens = createLink("http://foo.org/" + urlTitle ,(title + " " )) ;
doc.appendChild(document.createTextNode(liens));

//

Au lieu d'associer une url à chaque élément de l'array 'title', je
souhaite /spliter/ chaque élément et associer à chaque sous-élément
splité une url qui correspondrait au PATH, le premier sous-élément
splité correpondant au hostname.

Merci beaucoup pour votre aide.

--
kael

Avatar
ASM
kael wrote:
Merci beaucoup pour cet exemple. Ca s'approche substantiellement de ce
que je souhaite afficher.

Les urls affichées sont du type:

<a href="http://foo.org">aaa</a>
<a href="http://foo.org/bbb">bbb</a>
<a href="http://foo.org/ccc">ccc</a>
<a href="http://foo.org/ddd">ddd</a>

Et je souhaite afficher le chemin complet:

<a href="http://foo.org">aaa</a>
<a href="http://foo.org/bbb">bbb</a>


ha non, afficher le chemin complet c'est :

<a href="http://foo.org">http://foo.org</a>
<a href="http://foo.org/bbb">http://foo.org/bbb</a>
<a href="http://foo.org/bbb/ccc">http://foo.org/bbb/ccc</a>
<a href="http://foo.org/bbb/ccc/ddd">http://foo.org/bbb/ccc/ddd</a>

Voici un morceau de script:

// fonction qui permet de créer un lien

function createLink(href, txt) {
var link = document.createElement('a');
link.setAttribute('href', href);
//link.appendChild(document.createTextNode(txt));
link.innerHTML = txt;
return link;
}

// <snip>

title = link[i].getElementsByTagName('title')[0].textContent;


Bon ! v'là ot' chose !
d'où sort-ce ?
qu'est-ce censé faire ?

Récupérer le titre inséré dans un lien :

titreLien_1 = document.links[0].title;
titreLien_2 = document.links[1].title;

ou si on veut faire riche

titreLien_1 = document.links[0].getAttribute('title');
titreLien_2 = document.links[1].getAttribute('title');

ou si on veut faire encore plus riche

var tousLiens = document.getElementsByTagName('LINK');
titreLien_1 = tousLiens[0].getAttribute('title');
titreLien_2 = tousLiens[1].getAttribute('title');

et pour le contraire (attribuer un title) :

var unTitre = 'Salut de la comete'
tousLiens[0].setAttribute('title',unTitre);

function createLink(href, titre) {
var link = document.createElement('A');
href = 'http://www.'+href;
link.setAttribute('href', href);
link.setAttribute('title', titre);
link.setAttribute('target', 'ailleurs');
link.innerHTML = href;
return link;
}

// avec title = ['aaa/bbb/ccc/ddd','eee/fff','ggg/hhh/iii', etc.]


me v'là largué ... j'avions point déjà un title à la ligne d'avant ?

var urlTitle // et je cherche à définir 'urlTitle'


Oui, j'aimerais avoir une définition ...
qu'est-ce ?
où il est dans l'élément 'aaa/bbb/ccc/ddd' ?

var liens = createLink("http://foo.org/" + urlTitle ,(title + " " )) ;
doc.appendChild(document.createTextNode(liens));


avec html :
<div id="lesLiens"></div>

çà donne en JS :
doc = document.getElementById('lesLiens');
var lien_1 = createLink('yahoo.com','Site de referencement');
var lien_2 = createLink('free.fr','FAI');
var lien_3 = createLink(T[2][0],T[2][1]);
doc.appenChild(lien_1);
doc.appenChild(lien_2);
doc.appenChild(lien_3);

Au lieu d'associer une url à chaque élément de l'array 'title', je
souhaite /spliter/ chaque élément et associer à chaque sous-élément
splité une url qui correspondrait au PATH, le premier sous-élément
splité correpondant au hostname.


et les autres sous-éléments ?


Exemple de ce que je comprends :

'liensStr' est normalement sur une seule ligne

var liensStr = 'yahoo.com|;Site de referencement|loisirs;Section
Loisirs,free.fr|;FAI|page-perso;Hebergement pages persos|adsl;Abonnemnt
ADSL'

function afficheLiens() {
doc = document.getElementById('lesLiens');
T = liensStr.split(',');
for(var i=0;i<T.length;i++) {
T[i] = T[i].split('|');
for(var j=0;i<T[i].length;i++)
T[i][j].split(';');
}
for(var i=0;i<T.length;i++) {
for(var j=0;j<T[i].length;j++) {
var cetHref = T[i][0]
if(T[i][J][0].length>0) cetHref = cetHref+'/'+T[i][j][0];
var ceTitr = '';
if(T[i][j][1].length>0) ceTitr = T[i][j][1];
var ceLien = createLink(cetHref,ceTitr);
doc.appenChild(ceLien);
}
}
}




--
Stephane Moriaux et son [moins] vieux Mac

Avatar
kael
ASM wrote:

Bon ! v'là ot' chose !


Désolé, je vais essayer d'être plus clair. :-)

d'où sort-ce ?


En fait, j'essaye d'améliorer le script Greasemonkey _Annotate Google_
http://ponderer.org/download/greasemonkey/annotate_google.user.js pour y
ajouter les catégories DMOZ récupérées via l'API d'Alexa
http://pages.alexa.com/prod_serv/WebInfoService.html.

qu'est-ce censé faire ?


Par exemple, pour avoir des informations concernant http://google.com,
un fichier XML est généré à l'adresse suivante
http://aws-beta.amazon.com/onca/xml?Service=AlexaWebInfoService&SubscriptionId=1HJ726CA2H5AF6N4E502&Operation=UrlInfo&Url=http://google.com&ResponseGroup=Related,Keywords

qui contient notamment:

<Categories>
<CategoryData>
<Title>Search Engines/Google</Title>
<AbsolutePath>
Top/Computers/Internet/Searching/Search_Engines/Google
</AbsolutePath>
</CategoryData>
<CategoryData>
<Title>Industries/Computers and Internet</Title>
<AbsolutePath>
Top/Regional/North_America/United_States/California/Localities/M/Mountain_View/Business_and_Economy/Industries/Computers_and_Internet
</AbsolutePath>
</CategoryData>
</Categories>

J'aimerais rendre cliquable chaque partie du chemin selon l'url
correspondant à sa position dans le path. Or, actuellement les urls sont
du type :

http://dmoz.org/Top/Computers/Internet/Searching/Search_Engines/Google

et je souhaite créer plusieurs urls du type:

http://dmoz.org/Computers
http://dmoz.org/Computers/Internet
http://dmoz.org/Computers/Internet/Searching
http://dmoz.org/Computers/Internet/Searching/Search_Engines
http://dmoz.org/Computers/Internet/Searching/Search_Engines/Google

http://dmoz.org/Regional
http://dmoz.org/Regional/North_America
http://dmoz.org/Regional/North_America/United_States
etc.

Voici le script en l'état actuel, qui fonctionne sur http://google.com/*
- en espérant que le formatage ne sera pas affecté. (Ce script utilise
une clé perso - si vous souhaitez utiliser ce script quotidiennement,
svp enregistrez-vous pour obtenir une clé).

cf. var dmozs et function checkAlexa(id, url) :


// ==UserScript= // @name annotate google 2
// @description Add extra information to google search results
// @include http://google.com/*
// @include http://www.google.com/*
// @exclude http://mail.google.com/*
// ==/UserScript=
var REDIRECT = 'http://www.google.com/url?';

function createLink(href, txt) {
var link = document.createElement('a');
if (href) {
link.setAttribute('href', href);
}
link.style.color = '#00f';
link.style.textDecoration = 'underline';
link.style.cursor = 'pointer';
link.innerHTML = txt;
return link;
}

function removeGoogleRedirect(url) {
if (url.substr(0, REDIRECT.length) == REDIRECT) {
var url_tokens = url.split('&');
for (var t in url_tokens) {
var token = url_tokens[t];
if (token.substr(0, 2) == 'q=') {
url = decodeURIComponent(token.substr(2));
break;
}
}
}
return url;
}

function getDelLink(url) {
return 'http://del.icio.us/url?url='
+ encodeURIComponent(removeGoogleRedirect(url));
}

function xpath(expr, doc) {
if (!doc) {
doc = document;
}
var items = document.evaluate(expr, doc, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null);
var ret = [];
for (var i = 0; i < items.snapshotLength; ++i) {
ret.push(items.snapshotItem(i));
}
return ret;
}


function checkAlexa(id, url) {
GM_xmlhttpRequest({
method: 'GET',
url:
"http://aws-beta.amazon.com/onca/xml?Service=AlexaWebInfoService&SubscriptionIdF5FQSKCE5N08PXQD82&Operation=UrlInfo&Url="+url+"&ResponseGroup=Related,Keywords",
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey/0.5.1',
'Accept': 'application/atom+xml,application/xml,text/xml',
},
onload: function(responseDetails) {
var elemDmoz = document.getElementById(id);
var nl = elemDmoz.childNodes;
for (var i = 0; i < nl.length; i++)
elemDmoz.removeChild(nl.item(i));

var parser = new DOMParser();
var dom = parser.parseFromString(responseDetails.responseText,
"application/xml");
var CategoryData = dom.getElementsByTagName('CategoryData');
var dmoz = '';

for (var i = 0; i < CategoryData.length; i++) {
dmoz = CategoryData[i].getElementsByTagName('AbsolutePath')[0].textContent;


// c'est ici que ça se corse :/

elemDmoz.appendChild(document.createTextNode(' '));
var dmozs = createLink("http://dmoz.org/" + dmoz ,(dmoz + " " )) ;
dmozs.setAttribute('style', 'color:#FF8E8E;background-color:#EEEEEE;');
elemDmoz.appendChild(dmozs);
elemDmoz.appendChild(document.createTextNode(' '));
}
}
});

}

function annotate() {
// get all the links
// also compatible with the add headings to google user script
var nodes = xpath("//p[@class='g']/a[1] | //p[@class='g']/h2/a[1]",
document);
for (var n in nodes) {
var node = nodes[n];
// create a span element for feed query
var span = document.createElement('span');
span.appendChild(document.createTextNode('? '));
var id = 'r' + n;
span.setAttribute('id', id);
node.parentNode.insertBefore(span, node.nextSibling);

// make the feed request
checkAlexa(id, removeGoogleRedirect(node.href));

}
}


// make sure this is a google search result page
var nodes = document.getElementsByTagName('title');
var isSERP = 0;
var node;
for (var n = 0; node = nodes[n]; ++n) {
if (node.text && node.text.indexOf('Google Search') != -1) {
isSERP = 1;
break;
}
}
if (isSERP) {
annotate();
}


Merci beaucoup pour votre aide.

--
kael