11484 sujets

JavaScript, DOM et API Web HTML5

Bonjour, je souhaiterais tronquer une partie d'une chaine de caractère qui se présente sous la forme suivante :

Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article

Le code javascript (olderLinkTitle renvoi la chaine de caractère en question) :


$(document).ready(function(){
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" .post-title:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link").text();
$("a.blog-pager-older-link").text(olderLinkTitle + " ");//rgt
});
});


Ce que j'aimerais faire est donc de tronquer cette chaine pour ne garder que Titre de l'article.

Si c'est possible, comment pourrais-je faire ça en javascript ?

Merci Smiley cligne
Modifié par misterclass (21 Jun 2019 - 21:52)
Bonjour niuxe Smiley smile

Etant novice en Javascript, cette procédure est à faire dans l'ordre ?

Edit:
Bon, j'ai réussi à découper la chaine de caractère et j'ai isolé "Titre de l'article Titre de l'article" :


var machaine = "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article";
var madecoupe = machaine.split(">");
var tempo = madecoupe[3];
console.log(tempo); //affiche Titre de l'article Titre de l'article


Maintenant, je cherche à quoi correspond le index lenght -1 Smiley hein
Modifié par misterclass (22 Jun 2019 - 18:54)
Modérateur
misterclass a écrit :
Bonjour niuxe Smiley smile

Etant novice en Javascript, cette procédure est à faire dans l'ordre ?

Edit:
Bon, j'ai réussi à découper la chaine de caractère et j'ai isolé "Titre de l'article Titre de l'article" :


var machaine = "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article";
var madecoupe = machaine.split(">");
var tempo = madecoupe[3];
console.log(tempo); //affiche Titre de l'article Titre de l'article

oui c'est à faire dans l'ordre.
Maintenant, je cherche à quoi correspond le index lenght -1 Smiley hein


Quel type de variable retourne la méthode String.split() ?
Lis cette page afin que tu comprennes où je veux en venir Array.length. Je me suis un peu mal exprimé dans mon post précédent (désolé).

let index = Array.length - 1;


Et pour finir, tu filtres un minimum ta donnée en utilisant String.trim()

Sinon, tu as une autre technique qui consiste à connaître l'endroit où se trouve le dernier chevron :
- String.lastIndexOf()
- String.substrong()
- String.trim()

Comme tu ne connais pas bien le js, c'est une manière à t'essayer sur les 2 techniques. Smiley smile
Modifié par niuxe (22 Jun 2019 - 18:55)
Ok, merci pour la précision, je vais regarder ça.

Sinon, quand je colle mon code à la suite de l'autre, ça me retourne un undefined, pourtant le alert(olderLinkTitle) me retourne bien "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article" Smiley ohwell


$(document).ready(function(){
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" .post-title:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link").text();
alert(olderLinkTitle); //retourne Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article
var machaine = olderLinkTitle;
var madecoupe = machaine.split(">");
var tempo = madecoupe[3];
alert(tempo); //retourne undefined
});
});

Modifié par misterclass (23 Jun 2019 - 12:49)
Modérateur
Que vaut ça ?

olderLink 


et ça ?

$('a.blog-pager-older-link')


Le problème avec ton code, il est illisible. Si tu peux le rééditer s'il te plait.

ps : relis bien mon post précédent. Je l'ai réédité.
Modifié par niuxe (22 Jun 2019 - 19:01)
Alors pour info :
- olderLink vaut l'url de l'article précédent
- $('a.blog-pager-older-link') = comment faire une alert() dessus ?

Sinon, comme je n'arrive pas à résoudre mon problème de undefined avec le code précédent, j'ai essayé avec la seconde solution mais je suis une nouvelle fois bloqué. Je n'arrive pas à découper jusqu'au chevron. Si je mets un :
lastIndexOf('T')
J'ai la découpe que se fait correctement (Titre de l'article Titre de l'article). Mais si je mets comme dans le code :
lastIndexOf('>')
Aucune découpe ne s'effectue (Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article)


var machaine = olderLinkTitle;
alert(machaine); //affiche Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article
var madecoupe = machaine.substring(machaine.lastIndexOf('>'));
alert(madecoupe); //affiche Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article


Oui, j'ai vu que tu avais réédité ton message. Je vais d'abord résoudre mon problème avant de passer à la suite.

Que veux tu dire par "ton code est illisible" ?
Modifié par misterclass (23 Jun 2019 - 12:46)
Bon, j'ai résolu le problème. J'arrive à découper jusqu'au dernier chevron avec la seconde méthode en mettant un
lastIndexOf(">")


Je continue mes investigations Smiley ravi

Edit : Avec le code ci-dessous, j'ai réussi à retourner un tableau qui contient : Titre,de,l'article,Titre,de,l'article


$(document).ready(function(){
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" .post-title:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link").text();
var madecoupe = olderLinkTitle.substring(olderLinkTitle.lastIndexOf(">")+1);
var reg = new RegExp("[ ,;]+", "g");
var montableau = madecoupe.split(reg);
$("a.blog-pager-older-link").text(montableau + "");//rgt
});
});


Je sais pas trop à quoi va me servir le Array.lenght...
Ne faudrait-il pas que je compare les éléments du tableau pour supprimer les équivalences ?
Modifié par misterclass (23 Jun 2019 - 16:06)
Modérateur
misterclass a écrit :
Bon, j'ai résolu le problème. J'arrive à découper jusqu'au dernier chevron avec la seconde méthode en mettant un
lastIndexOf(">")


Je continue mes investigations Smiley ravi

Edit : Avec le code ci-dessous, j'ai réussi à retourner un tableau qui contient : Titre,de,l'article,Titre,de,l'article


$(document).ready(function(){
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" .post-title:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link").text();
var madecoupe = olderLinkTitle.substring(olderLinkTitle.lastIndexOf(">")+1);
var reg = new RegExp("[ ,;]+", "g");
var montableau = madecoupe.split(reg);
$("a.blog-pager-older-link").text(montableau + "");//rgt
});
});


Je sais pas trop à quoi va me servir le Array.lenght...
Ne faudrait-il pas que je compare les éléments du tableau pour supprimer les équivalences ?


La regEx ce n'est pas la peine. Tu peux tout à fait faire String.split('>'). Ensuite il faudrait que tu lises cet article. Car là je vois que tu tournes en rond pour cette histoire de Array.length

Les objets et les tableaux
Modérateur
misterclass a écrit :
Bon, j'ai résolu le problème. J'arrive à découper jusqu'au dernier chevron avec la seconde méthode en mettant un
lastIndexOf(">")



Si tu es arrivée, tu n'as plus qu'à utiliser String.substring() et le String.trim() pour finir
niuxe a écrit :


Si tu es arrivée, tu n'as plus qu'à utiliser String.substring() et le String.trim() pour finir


Donc je laisse tomber le Array.length ?

Edit: donc j'ai remplacé la RegEx par la String.split(' '), maintenant j'ai un tableau avec les éléments suivants :
montableau = ['Titre', 'de', 'l'article', 'Titre', 'de', 'l'article']

Ce qui m'intéresse est de récupérer : Titre de l'article

Je suppose donc que je dois utiliser ".lenght" pour compter le nombre d'items du tableau (compteur=8 ici) puis n'afficher que "compteur/2" (ce qui correspond aux4 premiers items du tableau ici) ?

Mise à jour du code :

$(document).ready(function(){
var olderLink = $("a.blog-pager-older-link").attr("href");
$("a.blog-pager-older-link").load(olderLink+" .post-title:first", function() {
var olderLinkTitle = $("a.blog-pager-older-link").text();
var madecoupe = olderLinkTitle.substring(olderLinkTitle.lastIndexOf(">")+1);
var montableau = madecoupe.split('  ');
$("a.blog-pager-older-link").text(montableau + "");//rgt
});
});

Modifié par misterclass (24 Jun 2019 - 12:23)
Modérateur
Je vois que tu tournes en rond. Le mieux est que tu me lises et que tu débogues en utilisant console.log()



//première technique 
let ariane = "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article";
let pieces = ariane.split('>');

//comment prendre le dernier élément d'un tableau ?
let dernier_index = pieces.length - 1;
let titre = pieces[dernier_index];

//nettoyer
titre = titre.trim();
console.log(titre);



//deuxième technique 
let ariane = "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article";
let position_dernier_chevron = ariane.lastIndexOf('>');
let titre = ariane.substring(position_dernier_chevron);

//nettoyer
titre = titre.trim();
console.log(titre);
Merci d'avoir simplifier le code mais je me suis sans doute mal expliqué. Ce que je voudrais c'est récupérer "Titre de l'article" uniquement et non pas "Titre de l'article Titre de l'article".

C'est pour cela que je m'orienter vers un tableau pour pouvoir séparer le tout et comparer les équivalences... mais je ne sais si c'est la bonne façon de faire.

Cependant, j'ai remarqué qu'il y a un retour chariot qui séparent les deux "Titre de l'article", ça pourrait peut-être simplifier les choses.

Vers quoi je dois m'orienter du coup pour avoir ce que je recherche ?

Je précise que je ne suis pas l'auteur du code de départ avec olderLink et olderLinkTitle. Je ne fais que récupérer ces deux variables et je travaille à partir de là. Je ne peux donc pas les modifier à la source.

Smiley smile
Modifié par misterclass (25 Jun 2019 - 10:59)
salut,

il faudrait déjà être sûr de comment est constituée la partie "Titre de l'article Titre de l'article". Si un retour chariot est toujours présent, tu peux alors récupérer la chaîne de manière simple :

var machaine = "Intitulé1>Intitulé 2>Intitulé 3>Titre de l'article Titre de l'article";

var titre = machaine.split(">").pop().split("\n").pop();  // ou .shift() à la fin s'il s'agit de du premier "Titre de l'article"
Meilleure solution
Merci pour le coup de main, Zelalsan Smiley smile

Ça fonctionne comme je le veux. Pour info, j'ai du mettre une .shift() car avec une .pop() ça ne marche tout simplement pas. Merci à niuxe de m'avoir aiguillé. Ça m'a beaucoup servi, dommage d'avoir bloqué à la dernière étape.