error while using JSON.parse() in JavaScript - javascript

I have following data in JSON format and I want to parse in in JavaScript.
{"id":"897868990272958","posts":{"data":[{"id":"897868990272958_965738636819326","message":"As you are now aware, Federal elections have to be financed by personal donations only. To support my campaign, there is still tickets for my cocktail of Aug.27. at Balmoral's Community center. A 75% tax credit will be given for the net value of the ticket after expenses (+/- 33,75$ back into your pockets).\n\nComme vous le savez, les élections fédérales ne sont financées que par des dons personnels. Afin d'encourager ma campagne, il reste toujours des billets pour le cocktail du 27 août au centre communautaire de Balmoral. Un crédit d'impôt de 75% vous sera retourné sur la valeur net du billet après dépenses (+/- 33,75$ de retour dans vos poches).\n\nTo reserve tickets/pour réserver des billets: 753-6121.","comments":{"data":[{"id":"965738636819326_966081753451681","message":"je t'encourage mon rene mes indisponible ce soir"}],"paging":{"cursors":{"after":"MQ==","before":"MQ=="}}}},{"id":"897868990272958_965083470218176","message":"Hier, Haut-Madawaska !\n\nVisite d'entreprises et quelques poignées de mains à Clair et Baker Brook. Une visite éclaire à Saint-Hilaire et Edmundston puis, en soirée, rencontre avec le conseil municipal du Lac Baker. Le Haut-Madawaska est un exemple d'entrepreneurship et d'esprit d'initiative. Le chômage y est à zéro et on manque de travailleurs. Pas besoin d'envier la Beauce. À preuve, cette Coopérative qui vient de naitre à Clair et dont l'objectif ultime est de créer de l'emploi à partir de nos ressources à portée de main, et de miser sur la transformation. Bravo à tous ces convaincus et bénévoles qui ne jurent que par le mouvement coopératif et l'esprit communautaire.\n\nBravo aussi au conseil municipal et au maire suppléant du Lac Baker pour leur dévouement et l'énergie qu'ils mettent à protéger et développer ce bijoux de village.\n\nÀ entendre les gens que nous croisons, dans la rue ou dans les usines, nous recevons une oreille très attentive au Plan des libéraux, relativement à la classe moyenne. Il ne fait aucun doute, le vent tourne !"},{"id":"897868990272958_962429560483567","message":"Venez me rencontrer pour un cocktail !!!\nPour réserver votre billet, communiquez avec nous au quartier général libéral au 753-6121 (15 rue water, Campbellton NB)\n****************************************\nCome and meet me for a cocktail !!!\nTo reserve your tickets, please contact us at the liberal campaign office at 753-6121 (15 Water street, Campbellton NB)"},{"id":"897868990272958_961763833883473","message":"Hier, 18 août, visite de deux conseils municipaux coup sur coup !\n\nD'abord Balmoral. Comme d'autres municipalités de taille équivalente que j'ai déjà rencontrées, un conseil maitrisant ses dossiers avec des projets responsables et raisonnables à portée de réalisation. Il ne manque que la collaboration du fédéral qui n'est que trop absent. Bravo pour ce dynamisme.\n\nEnsuite Dalhousie. Comment ne pas lever son chapeau au maire Tremblay et ses conseillers et conseillères. Ils se battent pour notre petite ville du Restigouche-Est qui a subi des pertes de revenus «drastiques» suivant la fermeture du moulin et celle du plan thermique d'ÉNB. They are facing big challenges and they will have difficult decisions to take. We know the town's council will take those decisions in the best interest of it's community in mind. I will be there with an attentive ear to support their projets."},{"id":"897868990272958_961114093948447","message":"Aujourd'hui, Saint-Léonard au Rendez-vous des artistes !\n\nGrosse chaleur d'été, de beaux tableaux, de belles sculptures, des artistes extraordinaires et des gens qui nous laissent toujours entendre que... le vent tourne ! Je suis revenu à la maison avec ce tableau de circonstance en cette fin de semaine du 15 août. Merci à l'artiste-peintre Péruse. Surtout, toutes nos félicitations aux bénévoles qui ont encore fait un succès de ce rendez-vous des artistes.\n\nWarm day at «Le rendez-vous des artistes\". We saw beautiful paintings, sculpturs, and talked with interesting artists. And how pleasant it was to meet people. They surely let us know that the tide is turning ! I came back home with this beautiful painting right on the point for the ending weekend of the Acadian day. Thanks to artist-painter Péruse. Also, congratulations to all volunteers that made this artists gathering a success."}],"paging":{"previous":"https://graph.facebook.com/v2.4/897868990272958/posts?limit=5&fields=comments.limit%2815%29%7Bcomments%7Bmessage%7D,message%7D,message&since=1440606601&__paging_token=enc_AdD9KfoIkGsvwvKGKPHUvyEPbhuF2RoK63BKHTPw7tovNNMLZAZApH668RXKwpdMnnp7D6psZAc7wZAh0DlYIFoNPsjXjzfML0qyh30Oasasv9pyZAAZDZD&__previous=1","next":"https://graph.facebook.com/v2.4/897868990272958/posts?limit=5&fields=comments.limit%2815%29%7Bcomments%7Bmessage%7D,message%7D,message&until=1439765409&__paging_token=enc_AdDayGW6NPPTZA7gGT2HgRGZAVqinlc7ijLdPwYbZBexBpuBejfIzGdM42uW1GbO8epju5j8dDNv8qJ1lY8SMLZBZBQ3J0cIywdzQclw8KmqXv8HWlgZDZD"}}}
When I use the console of Google Chrome to do that it gives me an error. I want to write following lines:
var json = MY_DATA;
JSON.parse(json);
But when I want to assign my data to json the console gives me following error
Uncaught SyntaxError: Unexpected identifier(…)
What is the problem?

It looks like your JSON is already parsed to an object. You then try to parse it again and it is confused.
This is a pretty common mistake.
Some functionalities in jQuery automatically parse JSON and don't need to be explicitly told to.

#Adosi has already answered this correctly but I was adding an example so I'll include it anyway as it's too long for a comment. Add this to your code and open up your browser's console.
console.clear();
// your original data
var json = MY_DATA;
console.info("var json is a", typeof json);
console.log('json.id:', json.id);
// when json is stored as a string, it needs to be parsed.
// let's convert it back into a string and see what happens
var json_needing_parsing = JSON.stringify(json)
console.info("var json_needing_parsing is a", typeof json_needing_parsing);
console.log('json_needing_parsing.id:', json_needing_parsing.id); //undefined
// That didn't work. Let's parse it.
var json_parsed = JSON.parse(json_needing_parsing);
console.info("var json_parsed is a", typeof json_parsed);
console.log("json_parsed.id:", json_parsed.id);
Here it is in action. http://jsfiddle.net/qn9xkt7c/ (because the Stack Snippet editor was cross at me for the giant json object)

Related

How can I make the next letter appear with the mouse event?

What I want my code to do is when I pass with my mouse on my text, the next letters of the alphabet appear. Not in the console, in the text on my website. How can i do that?
this is an exemple for what i want : the text become unreadable
var conteneur = document.querySelector('.texte2')
var textBalise = conteneur.textContent.replace(/(\S)/g,'<span class = x>$1</span>')
conteneur.innerHTML = textBalise
var $spans = document.querySelectorAll('span')
function nextLetter(ch) {
if (!ch.match(/[a-zA-ZäöüßÄÖÜ]/i)) return ch;
else if (ch === 'Z') return 'A';
else if (ch === 'z') return 'A';
return String.fromCharCode(ch.charCodeAt(0) + 1);
}
for (var $span of $spans) {
$span.addEventListener('mousemove',(e) => {
console.log(e.target)
console.log(nextLetter(e.target.textContent))
});
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="style.css">
<script src="script.js" defer></script>
<title>Peut-on encore être graphiste au pays des Templates ?</title>
</head>
<body>
<div class ="texte2">
<p>Avec l’arrivée du numérique, on doit visionner les documents sur des machines et des écrans différents. Cette différence de support de visualisation est déjà bien connue avec le cinéma. En effet visionner un film en salle ou chez vous est totalement différent. Mais avec l’intermédiaire technique que sont nos ordinateurs, les différences se font encore plus importantes, différence de résolution, du nombre de couleur, de taille, de vitesse d’affichage… Nous avons un codage de l’information puis un décodage avec toutes les variations que cela peut entraîner.</p>
<p>L’arrivée du langage HTML, qui est qu’un langage de description de page. Ce langage donne des indications au navigateur, qui va lui-même interpréter ces pages afin de les afficher au mieux sur votre machine. Suivant votre navigateur, votre système d’exploitation, votre vitesse de connexion, votre écran, vos polices de caractères installées… la formalisation de la page peut être très différente (codage/décodage).</p>
<p>C’est la première fois dans l’Histoire (graphique) que le graphiste/typographe perd le contrôle du choix de la police de caractères. En effet en Html, c’est l’utilisateur final qui choisi sa police de caractère et sa taille dans les préférences de son navigateur.</p>
<p>L’arrivée des CSS a aussi précipité les choses. Dorénavant la forme est totalement séparée du contenu. Il est techniquement très facile de changer la formalisation d’un même contenu sur le Web (savoir si cela à du sens est une autre question). Un des exemples le plus célèbre est sans nul doute : le Zen Garden de Molly Holzschlag.</p>
<p>Dans le monde du jeux vidéos nous avons exactement le même processus, la résolution, l’aspect graphique, la vitesse… du jeu vont différer suivant votre machine. Les concepteurs de jeux ont pris en compte ce genre de contraintes depuis longtemps.
L’arrivée des Mods dans les jeux avec Counter Strike par exemple. Le jeu vendu est souvent une démo technique avec la possibilité de faire ses propres "maps". On donne alors à la communauté des joueurs la possibilité de prendre la parole (ou le fusil ;-) il devient alors coauteur d’un jeu. Attention quand je parle de coauteur, ce n’est pas au sens on nous pouvons le comprendre dans le domaine du cinéma ou de la littérature. De plus je vous passe les problèmes juridiques que cela peut engendrer, suis-je le propriétaire de ma Map, de mon avatar, de mon aventure… ?</p>
<p>Le succès (médiatique) de Second life est un autre un très bon exemple. Des développeurs ont mis à disposition un univers et des outils aux internautes. Petit à petit, les gens ont commencé à développer de petits univers, des objets, des animations… puis un biotope s’est développé presque naturellement (je vous passe mon jugement sur l’aspect formel de Second Life;-).
L’équipe de Linden lab (les créateurs de Second life), n’a pas imposé un univers fini, elle a au contraire juste posé les bases : un espace virtuel, un langage de script et la possibilité de sauvegarder et d’échanger vos créations virtuelles (vous faisant croire que l’on peut devenir riche sur Second Life, très grande idée Marketing). Pas d’histoires pas de scénario, pas de jeux, juste un grand espace vide, une sorte de grand Légo plein de promesse.
ps : Si Second Life vous intéresse, lisez absolument le roman de Neal Stephenson : Snow Crash (le ridicule titre français est Le samouraï virtuel). Vous aurez la source d'inspiration principale des créateurs de Second Life. Vous pouvez aussi jeter un ? il sur un des précurseurs français : le deuxième monde d’Alain et Frédéric Le Diberder + Cryo (à partir de 1994).</p>
<p>Il faut bien sûr citer les systèmes de blog, les Flickr, Ebay et autres MySpace permettant à presque n’importe qui de faire son propre site web, faire sa boutique en ligne et de diffuser photos, vidéos, texte ... très rapidement, facilement et gratuitement (dans la majorité des cas). Nous pourrions continuer longtemps les exemples.</p>
<p>Nous arrivons donc à un moment ou le commanditaire désire naturellement contrôler le contenu (ce qui est normal) mais aussi le contenant de A à Z sur son site web. Le graphiste/designer voit donc son « pouvoir » se déplacer et migrer vers d’autres responsabilités.</p>
<p>ps : Une autre raison peu avouable de cette récente demande de plus grand contrôle de la part des commanditaires, est l’abus de certaines Web Agency (pas de noms ;-) durant la période de la bulle internet (avant 2000), ayant franchement escroqué de nombreux clients en sur-facturant la moindre modification dans leurs sites web après la mise en ligne. Les commanditaires étaient souvent pieds et mains liés devant les agences, car ils n'avaient pas un accès technique direct à leurs sites (les agences donnant souvent des prétextes techniques totalement faux).</p>
</div>
</body>
</html>
.x:hover{
color : "red";
}
You are almost there!
Try:
e.target.innerHTML = nextLetter(e.target.textContent)
as the final line of your event listener function (ie after, or instead of, logging the output of nextLetter() to the console).
It certainly makes the words on the page nonsense pretty fast!
var conteneur = document.querySelector('.texte2')
var textBalise = conteneur.textContent.replace(/(\S)/g,'<span class = x>$1</span>')
conteneur.innerHTML = textBalise
var $spans = document.querySelectorAll('span')
function nextLetter(ch) {
if (!ch.match(/[a-zA-ZäöüßÄÖÜ]/i)) return ch;
else if (ch === 'Z') return 'A';
else if (ch === 'z') return 'A';
return String.fromCharCode(ch.charCodeAt(0) + 1);
}
for (var $span of $spans) {
$span.addEventListener('mousemove',(e) => {
console.log(e.target)
console.log(nextLetter(e.target.textContent))
e.target.innerHTML = nextLetter(e.target.textContent)
});
}
<div class ="texte2">
<p>Avec l’arrivée du numérique, on doit visionner les documents sur des machines et des écrans différents. Cette différence de support de visualisation est déjà bien connue avec le cinéma. En effet visionner un film en salle ou chez vous est totalement différent. Mais avec l’intermédiaire technique que sont nos ordinateurs, les différences se font encore plus importantes, différence de résolution, du nombre de couleur, de taille, de vitesse d’affichage… Nous avons un codage de l’information puis un décodage avec toutes les variations que cela peut entraîner.</p>
<p>L’arrivée du langage HTML, qui est qu’un langage de description de page. Ce langage donne des indications au navigateur, qui va lui-même interpréter ces pages afin de les afficher au mieux sur votre machine. Suivant votre navigateur, votre système d’exploitation, votre vitesse de connexion, votre écran, vos polices de caractères installées… la formalisation de la page peut être très différente (codage/décodage).</p>
<p>C’est la première fois dans l’Histoire (graphique) que le graphiste/typographe perd le contrôle du choix de la police de caractères. En effet en Html, c’est l’utilisateur final qui choisi sa police de caractère et sa taille dans les préférences de son navigateur.</p>
<p>L’arrivée des CSS a aussi précipité les choses. Dorénavant la forme est totalement séparée du contenu. Il est techniquement très facile de changer la formalisation d’un même contenu sur le Web (savoir si cela à du sens est une autre question). Un des exemples le plus célèbre est sans nul doute : le Zen Garden de Molly Holzschlag.</p>
<p>Dans le monde du jeux vidéos nous avons exactement le même processus, la résolution, l’aspect graphique, la vitesse… du jeu vont différer suivant votre machine. Les concepteurs de jeux ont pris en compte ce genre de contraintes depuis longtemps.
L’arrivée des Mods dans les jeux avec Counter Strike par exemple. Le jeu vendu est souvent une démo technique avec la possibilité de faire ses propres "maps". On donne alors à la communauté des joueurs la possibilité de prendre la parole (ou le fusil ;-) il devient alors coauteur d’un jeu. Attention quand je parle de coauteur, ce n’est pas au sens on nous pouvons le comprendre dans le domaine du cinéma ou de la littérature. De plus je vous passe les problèmes juridiques que cela peut engendrer, suis-je le propriétaire de ma Map, de mon avatar, de mon aventure… ?</p>
<p>Le succès (médiatique) de Second life est un autre un très bon exemple. Des développeurs ont mis à disposition un univers et des outils aux internautes. Petit à petit, les gens ont commencé à développer de petits univers, des objets, des animations… puis un biotope s’est développé presque naturellement (je vous passe mon jugement sur l’aspect formel de Second Life;-).
L’équipe de Linden lab (les créateurs de Second life), n’a pas imposé un univers fini, elle a au contraire juste posé les bases : un espace virtuel, un langage de script et la possibilité de sauvegarder et d’échanger vos créations virtuelles (vous faisant croire que l’on peut devenir riche sur Second Life, très grande idée Marketing). Pas d’histoires pas de scénario, pas de jeux, juste un grand espace vide, une sorte de grand Légo plein de promesse.
ps : Si Second Life vous intéresse, lisez absolument le roman de Neal Stephenson : Snow Crash (le ridicule titre français est Le samouraï virtuel). Vous aurez la source d'inspiration principale des créateurs de Second Life. Vous pouvez aussi jeter un ? il sur un des précurseurs français : le deuxième monde d’Alain et Frédéric Le Diberder + Cryo (à partir de 1994).</p>
<p>Il faut bien sûr citer les systèmes de blog, les Flickr, Ebay et autres MySpace permettant à presque n’importe qui de faire son propre site web, faire sa boutique en ligne et de diffuser photos, vidéos, texte ... très rapidement, facilement et gratuitement (dans la majorité des cas). Nous pourrions continuer longtemps les exemples.</p>
<p>Nous arrivons donc à un moment ou le commanditaire désire naturellement contrôler le contenu (ce qui est normal) mais aussi le contenant de A à Z sur son site web. Le graphiste/designer voit donc son « pouvoir » se déplacer et migrer vers d’autres responsabilités.</p>
<p>ps : Une autre raison peu avouable de cette récente demande de plus grand contrôle de la part des commanditaires, est l’abus de certaines Web Agency (pas de noms ;-) durant la période de la bulle internet (avant 2000), ayant franchement escroqué de nombreux clients en sur-facturant la moindre modification dans leurs sites web après la mise en ligne. Les commanditaires étaient souvent pieds et mains liés devant les agences, car ils n'avaient pas un accès technique direct à leurs sites (les agences donnant souvent des prétextes techniques totalement faux).</p>
</div>

JQuery data attribute sometimes is an array, sometimes a string

I'm getting a bit of issues trying to hide arrays containing strings with special characters in checkboxes values. I've got these 3 DOM elements :
<div class="question-container form-group" data-id="235" data-parent-elements-visibility="["Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des \"quotes\"", "Choix trois avec des a'postrop`hes et de deux [trucs] chelou<<."]" data-parent-id="304" id="question-container-235">
</div>
<div class="question-container form-group" data-id="307" data-parent-elements-visibility="["Choie 2 #\#$%^&*(", "Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des \"quotes\"", "Choix trois avec des a'postrop`hes et de deux [trucs] chelou<<."]" data-parent-id="304" id="question-container-307">
</div>
<div class="question-container form-group" data-id="303" data-parent-elements-visibility="["Choie 2 #\#$%^&*(", "Choice 3 $^%&&_++_<>", "Choix 1 mon pote ! Avec des accent est des ç cédille", "Choix trois avec des a'postrop`hes et de deux [trucs] chelou<<."]" data-parent-id="304" id="question-container-303">
</div>
When I try to get the data attribute 'data-parents-elements-visibility', this is what I get :
$("#question-container-303").data('parent-elements-visibility')
"[\"Choie 2 #\\#$%^&*(\", \"Choice 3 $^%&&_++_<>\", \"Choix 1 mon pote ! Avec des accent est des ç cédille\", \"Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<.\"]"
$("#question-container-307").data('parent-elements-visibility')
"[\"Choie 2 #\\#$%^&*(\", \"Choice 3 $^%&&_++_<>\", \"Choix deux, avec des virgules et des \\\"quotes\\\"\", \"Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<.\"]"
$("#question-container-235").data('parent-elements-visibility')
(3) ["Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des \"quotes\"", "Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<."]
So question-container-235 behaves correctly and gives me an array back. Do you know why the other 2 are returning strings instead of the array ?
Thanks a lot !
The reason is data-parent-elements-visibility value in 307 has an issue with the 16th character which is a backslash. This is breaking content in between and avoid it being parse as an array.
Below will work fine(either double \ or none):
<div class="question-container form-group" data-id="307" data-parent-elements-visibility="["Choie 2 #\\#$%^&*(", "Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des \"quotes\"", "Choix trois avec des a'postrop`hes et de deux [trucs] chelou<<."]" data-parent-id="304" id="question-container-307">
I guess the best way to handle it was what #zer00ne said : I reworked the entire thing to make an extra API call and have a nice json object to work with instead of storing that much stuff (user provided) in data attributes, which is prone to issues even if that backslash change might work in this particular case.
Thanks a lot !

I cannot select an element from the DOM [duplicate]

This question already has answers here:
How to select html nodes by ID with jquery when the id contains a dot?
(8 answers)
Closed 2 years ago.
I'm trying to retrieve an element with jquery, but I can't ... The element with the corresponding id is created and present on my source code, however, with the correct selector, it remains undefined.
my html:
<div id='container-journal'>
<!--Pour scroll jusqu'au nouveau texte-->
<button id='btn-scroll'>Scroll</button>
<input type="text" id='scroll_to' value="{{scroll_to}}" >
<div id="cadre-sommaire" class="list-group">
{{sommaire_html|safe}}
</div>
<div id='cadre-textes' data-spy="scroll" data-target="#cadre-sommaire" data-offset="30" class="scrollspy-example">
{{textes_html|safe}}
<div id='to-be-continued'>
<img id="image-stylo" src="{% static 'aventures/stylo_plume.png' %}" alt="un stylo plume">
</div>
</div>
</div>
The searched element is located in the variable textes_html.
When the input has the value: '#cha-3-sit-4.2'
My source gives me the element: <p id="cha-3-sit-4.2" class="texte-chap-situ heros-concernes">...</p>
JS code:
$(function() {
$('#container-journal').on('click', '#btn-scroll', function() {
var scroll_to = $('#scroll_to').val()
if (scroll_to.length) {
$('#cadre-textes').animate({
scrollTop: $(scroll_to).offset().top
}, 1000);
}
})
})
I guess the reason is because the DOM is created from a variable, but I don't understand why this is a problem. Sorry, I'm a beginner.
Thx !
add:
Im using Django
Here the created source:
<div id='container-journal'>
<!--Pour scroll jusqu'au nouveau texte-->
<button id='btn-scroll'>Scroll</button>
<input type="text" id='scroll_to' value="#cha-3-sit-4.2" >
<div id="cadre-sommaire" class="list-group">
<a class='list-group-item list-group-item-action chapitre sommaire' href='#chapitre-1'>Chapitre 1 : Préparatifs</a><a class="list-group-item list-group-item-action tour sommaire" href="#chap-1-situ-1" >Se préparer pour le ...</a><a class='list-group-item list-group-item-action chapitre sommaire' href='#chapitre-2'>Chapitre 2 : La grande plaine</a><a class="list-group-item list-group-item-action tour sommaire" href="#chap-2-situ-2" >La grande champignon...</a><a class='list-group-item list-group-item-action chapitre active sommaire' href='#chapitre-3'>Chapitre 3 : La forêt enchantée</a><a class="list-group-item list-group-item-action tour sommaire" href="#chap-3-situ-1" >Choix du chemin dans...</a><a class="list-group-item list-group-item-action tour sommaire" href="#chap-3-situ-4" >La vieille cabane</a>
</div>
<div id='cadre-textes' data-spy="scroll" data-target="#cadre-sommaire" data-offset="30" class="scrollspy-example">
<hr class='hr-tour'><h3 class='journal-h' id='chapitre-1'>Chapitre 1 : Préparatifs</h3><hr class='hr-tour'><span class='texte-chap-situ'>Vous vivez dans un petit village à l'orée d'un bois, mais aujourd'hui n'est pas un jour comme les autres. Aujourd'hui, vous partez à l'aventure. <br>Aujourd’hui, vous partez défier un dragon et vous comptez bien revenir avec un trésor!</span><br><br><hr class='hr-tour'><h4 class='journal-h' id='chap-1-situ-1'>Se préparer pour le voyage</h4><hr class='hr-tour'><p class="tours">Tour n° 1.</p><br><p id="cha-1-sit-1.0" class="texte-chap-situ heros-concernes">Polux, pantouffle et mirouffle.</p><p class="texte-chap-situ">Pour trouver le dragon, vous allez rencontrer de nombreux dangers. Il faut donc bien vous préparer et pour cela une petite visite dans le village s'impose !</p><br><hr class='hr-tour'><h3 class='journal-h' id='chapitre-2'>Chapitre 2 : La grande plaine</h3><hr class='hr-tour'><span class='texte-chap-situ'>Alors que vous quittez le village, vous découvrez un vaste paysage, mais pas des plus faciles à parcourir.</span><br><br><p class="tours">Tour n° 2.</p><br><hr class='hr-tour'><h4 class='journal-h' id='chap-2-situ-2'>La grande champignonnière</h4><hr class='hr-tour'><p class="tours">Tour n° 3.</p><br><p id="cha-2-sit-2.0" class="texte-chap-situ heros-concernes">Polux, pantouffle et mirouffle.</p><p class="texte-chap-situ">Vous entrez dans la grande champignonnière. Tout est sombre et humide partout autour de vous, des petites silhouettes tapies dans l'ombre semblent vous observer. Elles sont de plus en plus nombreuses.</p><p class="texte-chap-situ">Vous avez déjà entendu parler de ces créatures, et êtes convaincus qu'elles sont parfaitement inoffensives. Vous vous souvenez avoir lu qu'elles sont très craintives et sensibles au bruit.</p><br><p class="journal-heros"><em><strong>Polux</strong> souhaite essayer de leur parler.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Pas très sûr de toi, tu essaies d’entrer en contact avec les petites créatures. Tes paroles résonnent dans la champignonnière, les silhouettes se bouchent les oreilles et finissent par disparaître. Alors que tu t’apprêtes à repartir, un peu déçu, tu remarques l’une d’entre elles venant à toi et poussant d’étranges chaussons faits de feuilles et d’écorce. Ils sont très confortables, mais surtout, tes pas ne font plus aucun bruit.</div></div><hr><br><p class="journal-heros"><em><strong>Mirouffle</strong> souhaite courir et essayer de les semer avec l'aide de <strong>Pantouffle</strong>.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/echec.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">D’un coup, vous vous élancez et vous mettez à courir le plus vite possible sans regarder derrière vous. Vous vous rendez rapidement compte que les petites créatures ne vous encerclaient pas réellement, mais qu’en réalité, la forêt en est remplie. Sans pour autant les voir, vous sentez l’agitation causée par votre fuite et en comprenez un peu tard la raison : vous piétinez de nombreux champignons, et cet acte de destruction semble les affoler.</div></div><hr><br><p id="cha-2-sit-2.1" class="texte-chap-situ heros-concernes">Pantouffle et mirouffle.</p><p class="texte-chap-situ">La limite de la champignonnière n’est plus très éloignée et il est fort probable qu’on ne te suivra pas en dehors, mais devant l’attitude de plus en plus agitée des petites silhouettes, vous réfléchissez à la meilleure démarche à suivre…</p><br><p class="journal-heros"><em><strong>Pantouffle</strong> souhaite arrêter de courir.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Comprenant l’agitation crée par ta fuite, tu décides de t’arrêter. Les créatures se calment à leur tour, leurs visages restent fermés, mais elles ne font pas signe de vouloir s’approcher. Après quelques instants, tu reprends lentement la route en faisant bien attention à ne pas piétiner les champignons, tu comprends vite que cette attitude est plus raisonnable et ressens l’apaisement des petites silhouettes environnantes. Elles te surveillent jusqu’à la sortie de la champignonnière, que tu n’es pas malheureux de quitter.</div></div><hr><br><p class="journal-heros"><em><strong>Mirouffle</strong> souhaite continuer à courir.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite_critique.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Tu redoubles d’effort et parviens à sortir de la champignonnière. Tu es épuisé et a besoin de te reposer un bon moment afin de récupérer de tes émotions.</div></div><hr><hr class='hr-tour'><h3 class='journal-h' id='chapitre-3'>Chapitre 3 : La forêt enchantée</h3><hr class='hr-tour'><span class='texte-chap-situ'>Vous laissez enfin la grande plaine derrière vous. Il fait chaud et vous ne seriez pas mécontent d’arriver en forêt si vous ne vous étiez pas un minimum renseigné sur ce qui vous attend. Autrefois rayonnante et pleine de vie, la Forêt Enchantée est désormais plongée dans l’obscurité et le silence, on la surnomme d’ailleurs maintenant la « Forêt Maudite ». Force est de constater qu’il ne reste plus grand-chose de l’ancienne magie, pure et bienfaisante. Les créatures que l’on y rencontre ne sont pas toutes malsaines, non, mais disons que la tendance n’est clairement plus aux bénédictions.</span><br><br><hr class='hr-tour'><h4 class='journal-h' id='chap-3-situ-1'>Choix du chemin dans la forêt</h4><hr class='hr-tour'><p class="tours">Tour n° 4.</p><br><p id="cha-3-sit-1.0" class="texte-chap-situ heros-concernes">Polux, pantouffle et mirouffle.</p><p class="texte-chap-situ">Arrivés dans la forêt, trois choix s’offrent à vous.<br>Le premier sentier mène aux anciennes sources d’eau chaude, autrefois très appréciées des voyageurs. Malheureusement, Kaa, un python d’une taille gigantesque, a décidé d’en faire son territoire. Le second sentier, à l’opposé du premier, risque de vous mener tout droit chez Verrula, une sorcière méchante et hideuse comme il se doit. Enfin, il est possible d’éviter ces sentiers, la progression en sera plus difficile et semée d’obstacles, mais les mauvaises rencontres moins certaines.</p><br><p class="journal-heros"><em><strong>Pantouffle</strong> souhaite le sentier de la sorcière avec l'aide de <strong>Mirouffle et Polux</strong>.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">En vous engageant sur ce chemin, vous vous remémorez ce que vous savez sur la sorcière. Verrula est installée dans la forêt depuis bien longtemps, il semble qu’elle se soit elle-même tournée vers le côté obscur progressivement, comme la forêt. Ainsi tout n’est pas perdu, peut-être lui reste-t-il un peu de gentillesse. Quoi qu’il en soit, elle a la fâcheuse tendance à se servir des aventuriers de passage comme cobayes pour ses expériences. Oh, ils finissent tous par ressortir de la forêt un jour ou l’autre… Il paraît que le dernier est rentré chez lui avec un nez de cochon.</div></div><hr><hr class='hr-tour'><h4 class='journal-h' id='chap-3-situ-4'>La vieille cabane</h4><hr class='hr-tour'><p class="tours">Tour n° 5.</p><br><p id="cha-3-sit-4.0" class="texte-chap-situ heros-concernes">Polux, pantouffle et mirouffle.</p><p class="texte-chap-situ">Vous vous engagez sur le sentier de la sorcière et remarquez très vite, à votre grand plaisir, que cette partie de la forêt semble avoir gardée un peu de son charme d’autrefois. Les arbres paraissent plus verts, moins serrés les uns contre les autres et le chemin en meilleur état. Bref, la promenade commence bien.<br>Bientôt vous découvrez une petite cabane en bois au bord du chemin. Le moins que l’on puisse dire, c’est qu’elle n’inspire pas confiance, elle est dans un sale état mais sa construction, robuste, ne laisse pas de place au doute quant à sa solidité. Ici et là sont accrochés aux murs d’étranges outils dont vous n’avez aucune idée de l’utilité, vous vous demandez d’ailleurs s’ils ne sont pas purement « décoratifs ». Vous remarquez aussi que diverses parties animales y sont accrochées, ce qui a pour effet de vous inquiéter davantage.<br>S’agit-il de la maison de la sorcière ? Celle-ci paraissant abandonnée, votre curiosité vous pousse à vous en approcher. Vous allez jusqu’à poser l’oreille contre la porte, à l’affut d’un bruit.<br>« Crrrrôôôôaaaaaa, crôa crôôaaaaaa ! » Un bruit infernal retentit alors derrière la porte, suivi de tapotements frénétiques contre la paroi. Vous sursautez et faites un bond en arrière. La créature enfermée dans cette cabane semble en grande détresse, son attitude indique clairement un appel à l’aide ! Mais vous n’avez plus vraiment de doute quant à la propriétaire des lieux, cette cabane appartient à la sorcière.</p><br><p class="journal-heros"><em><strong>Polux</strong> souhaite entrer dans la cabane avec l'aide de <strong>Pantouffle</strong>.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Quelque soit l’animal qui se trouve derrière cette porte, il a besoin de votre aide et vous ne pouvez pas vous résigner à passer votre chemin. La peur au ventre, vous essayez d’ouvrir discrètement la porte. Malheureusement, elle semble fermée de l’intérieur et vous n’avez pas d’autre choix que de rentrer en force. Elle cède facilement et vous vous retrouvez propulsés à l’intérieur. <br>Ce que vous découvrez est plus étrange encore qu’à l’extérieur : des ingrédients inconnus, des ustensiles de cuisine, des fioles et bocaux aux contenus douteux, de vieux livres poussiéreux sur des étagères bancales… Et une marmite posée dans la cheminée, au-dessus d’un feu mourant.</div></div><hr><br><p class="journal-heros"><em><strong>Mirouffle</strong> souhaite continuer son chemin.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">La prudence est de mise dans une telle situation. Quel que soit l’animal qui se trouve derrière cette porte, vous estimez que le risque de tomber nez à nez avec la sorcière est trop élevé, il pourrait d’ailleurs s’agir d’un piège, ou réveiller la sorcière de sa sieste... Vous n’avez aucune envie de vous attarder sur les lieux et vous vous éloignez en courant de la vieille cabane.</div></div><hr><br><p id="cha-3-sit-4.1" class="texte-chap-situ heros-concernes">Polux et pantouffle.</p><p class="texte-chap-situ">Les croassements vous ramènent à la réalité, le seul être vivant que vous trouvez en ce lieu ressemble à un corbeau, le bec bien trop gros, les ailes atrophiées et à moitié déplumé. Pas de sorcière à l’horizon, c’est un grand soulagement. Mais le corbeau ne vous laisse pas de répit, il sautille vers un objet d’apparence ronde et cristalline et le tapote du bec, vous indiquant de le prendre. Au moment ou l’un de vous saisit l’objet, une faible lueur s’en dégage et il est assailli par des paroles : « Aide-moi ! Aide-moi ! La fiole ! La fiole ! »<br>Vous comprenez que le corbeau surexcité peut vous parler par l’intermédiaire de cet objet magique.</p><br><p class="journal-heros"><em><strong>Polux</strong> souhaite rester pour aider le corbeau.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Ce pauvre animal te semble louche. Pourtant tu ne peux pas te résoudre à l’abandonner et décides de rester l’aider.</div></div><hr><br><p class="journal-heros"><em><strong>Pantouffle</strong> souhaite quitter les lieux et prendre l'objet.</em></p><div class="row" style="margin: 0;"><div class="col-3" ><img class="img-result-journal" src="/static/aventures/reussite.png" alt="Image correspondant au résultat de l'action."></div><div class="journal-texte-tour col-9">Cette situation ne te plaît pas, le corbeau ne t’inspire rien de bon. Tu préfères quitter les lieux sans trainer et glisses l’objet magique dans ta poche avant de sortir, le corbeau te poursuit quelques instants en te demandant de reposer l’objet, enfin en t'invectivant de tous les noms d’oiseaux ! Tu finis par le chasser plus vigoureusement et te sauves en courant, pas très fier de ton attitude.</div></div><hr><br><p id="cha-3-sit-4.2" class="texte-chap-situ heros-concernes">Pantouffle et mirouffle.</p><p class="texte-chap-situ">Vous courez un bon moment avant de vous considérer en sécurité, cette cabane était vraiment effrayante. Vous êtes fatigué d’avoir autant couru et avez besoin de refaire le plein d’énergie. Il faut marcher encore un peu avant de trouver un endroit acceptable pour une petite pause.<br>L’endroit est idéal, ensoleillé, placé au bord d’une rivière, un ancien banc usé par le temps et datant d’une époque où il faisait bon se promener en ce lieu, et cerise sur le gâteau, un magnifique pommier rempli de fruits mûrs.</p>
<div id='to-be-continued'>
<img id="image-stylo" src="/static/aventures/stylo_plume.png" alt="un stylo plume">
</div>
</div>
If my DOM is not fully loaded, how can I wait until my variable is loaded before executing my function?
edit2:
The consol errors:
Uncaught TypeError: $(...).offset() is undefined
<anonymous> http://127.0.0.1:8000/static/aventures/js/chapitre.js:252
jQuery 8
dispatch
handle
add
ke
each
each
ke
on
<anonymous> http://127.0.0.1:8000/static/aventures/js/chapitre.js:247
jQuery 13
e
t
setTimeout handler*l/<
c
fireWith
fire
c
fireWith
ready
B
EventListener.handleEvent*
<anonymous>
<anonymous>
chapitre.js:252:33
<anonyme> http://127.0.0.1:8000/static/aventures/js/chapitre.js:252
jQuery 8
dispatch
handle
(Asynchrone : EventListener.handleEvent)
add
ke
each
each
ke
on
<anonyme> http://127.0.0.1:8000/static/aventures/js/chapitre.js:247
jQuery 13
e
t
(Asynchrone : setTimeout handler)
l
c
fireWith
fire
c
fireWith
ready
B
(Asynchrone : EventListener.handleEvent)
<anonyme>
<anonyme>
<anonyme>
If you are getting Uncaught TypeError: Cannot read property 'top' of undefined it means your event handler is executing.
I think the problem is that the variable scroll_to is not a DOM node, instead, you are just saving the value inside the node ($('#scroll_to').val())
What if you try:
$(function() {
$('#container-journal').on('click', '#btn-scroll', function() {
var scroll_to = $('#scroll_to')
if (scroll_to.val().length) {
$('#cadre-textes').animate({
scrollTop: scroll_to.offset().top
}, 1000);
}
})
})

Copying all HTML contents from one div to another using jQuery

This question may seem as a duplicate one, but I cannot seem to find a solution for my problem.
I am fetching content from external websites using the iFramely API. Which works for almost all requested websites.
However, if I try to fetch for example a post from Reddit and display this in a sort of custom made 'preview box' the requested iFrame get rendered correctly, so far so good.
When I try to copy the HTML content of the 'preview box' in order to append it to another div using jQuery. It does not copy all HTML elements.
Complete function
$('#btn-add-extern-snippet').click(function() {
let embed_preview_container = $('#embed-preview');
let embed_target_number = $('#embed-target-number');
let target_number = $(embed_target_number).val();
$('.embed-no-' + target_number).html($(embed_preview_container).html());
...
});
I've tried the jQuery functions:
clone $('.embed-no-' + target_number).html($(embed_preview_container).clone());
html $('.embed-no-' + target_number).html($(embed_preview_container).html());
contents $('.embed-no-' + target_number).html($(embed_preview_container).contents());
using append $('.embed-no-' + target_number).append($(embed_preview_container).html());
But all of these functions do not seem the copy the full "innerHTML" of the mentioned 'preview box' (see pictures below).
The copied HTML content inside the 'other div' with an empty body & head.
The actual content in side the 'preview box'.
I must note here that this only seems to be te case for Reddit related content. It works for example with Soundcloud/Spotify/Bandcamp.
PS. I am using jQuery version 3.3.1
Code sample below:-
$("#copyToDiv").append($("#copyFromDiv").html());
Thanks
you can try this.
$('#copy').click(function(){
$('#div2').html($('#div1').html());
});
#div1{
background:green;
}
#div2{
background:blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id='copy'>Copy</button>
<div id='div1'>
<p>Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker.
</p>
<div>
<h2>Lorem Ipsum</h2>
<p>Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles
</p>
</div>
<div id='div2'></div>
Alright, so I've found the solution/workaround to my own problem. Instead of copying the contents of the 'preview box', I stored the fetched HTML in a temporary variable, and appended the contents of this variable inside an 'another div' (this works).
Noteworthy, something strange that occurred to me while debugging is that the browser (in this case Chrome), does not render/display HTML correctly (see picture) (note the empty iFrame).
This is exactly what .html() copied. So long story short the following code worked for me:
// temporary variable for storing html.
let currentSnippet = '';
$('#btn-add-extern-snippet').click(function() {
let embed_preview_container = $('#embed-preview');
let embed_target_number = $('#embed-target-number');
let target_number = $(embed_target_number).val();
$('.embed-no-' + target_number).html(currentSnippet);
...
});

jQuery replace ],[ with comma

I have my string like this :
[[{"en":"Search\r\n","fr":"Chercher","it":"Cercare"}],[{"en":"MORE INFORMATION:","fr":"PLUS D'INFORAMTION:","it":"Informazioni:"}],[{"en":"Why choose us ?","fr":"Pourquoi nous choisir ?","it":"Perché scegliere noi?"}],[{"en":"Here are the main values that will lead you to choose ELGATEK for your IT project:","fr":"Voici les principales valeurs qui vous amèneront à choisir ELGATEK pour votre projet Informatique :","it":"I valori chiave che portano a scegliere ELGATEK per il vostro progetto IT:"}],[{"en":"CREATIVITY & INNOVATION","fr":"CRÉATIVITÉ & INNOVATION","it":"Creatività e Innovazione"}]
I want to replace all occurrence this part string ],[ with comma.
I tried str.replace('],[',',') but it works only on the first occurrence.
Please help.
Another way to achieve that :
let s = "[[{\"en\":\"Search\\r\\n\",\"fr\":\"Chercher\",\"it\":\"Cercare\"}],[{\"en\":\"MORE INFORMATION:\",\"fr\":\"PLUS D'INFORAMTION:\",\"it\":\"Informazioni:\"}],[{\"en\":\"Why choose us ?\",\"fr\":\"Pourquoi nous choisir ?\",\"it\":\"Perché scegliere noi?\"}],[{\"en\":\"Here are the main values that will lead you to choose ELGATEK for your IT project:\",\"fr\":\"Voici les principales valeurs qui vous amèneront à choisir ELGATEK pour votre projet Informatique :\",\"it\":\"I valori chiave che portano a scegliere ELGATEK per il vostro progetto IT:\"}],[{\"en\":\"CREATIVITY & INNOVATION\",\"fr\":\"CRÉATIVITÉ & INNOVATION\",\"it\":\"Creatività e Innovazione\"}]]\n";
var result = s.split('],[').join(',');
You try:
str.replace(/],\[/g, ',')
Might be easier to just use JSON.parse, then map the array. You can still stringify it if you really need it as a string, however I suppose you want to get an array of objects anyway.
let s = "[[{\"en\":\"Search\\r\\n\",\"fr\":\"Chercher\",\"it\":\"Cercare\"}],[{\"en\":\"MORE INFORMATION:\",\"fr\":\"PLUS D'INFORAMTION:\",\"it\":\"Informazioni:\"}],[{\"en\":\"Why choose us ?\",\"fr\":\"Pourquoi nous choisir ?\",\"it\":\"Perché scegliere noi?\"}],[{\"en\":\"Here are the main values that will lead you to choose ELGATEK for your IT project:\",\"fr\":\"Voici les principales valeurs qui vous amèneront à choisir ELGATEK pour votre projet Informatique :\",\"it\":\"I valori chiave che portano a scegliere ELGATEK per il vostro progetto IT:\"}],[{\"en\":\"CREATIVITY & INNOVATION\",\"fr\":\"CRÉATIVITÉ & INNOVATION\",\"it\":\"Creatività e Innovazione\"}]]\n";
let p = JSON.parse(s).map(e => e[0]);
console.log(p);
// if you really need it as a string:
console.log(JSON.stringify(p));
your string should replace like this:
var str = '[[{"en":"Search\r\n","fr":"Chercher","it":"Cercare"}],[{"en":"MORE INFORMATION:","fr":"PLUS D\'INFORAMTION:","it":"Informazioni:"}],[{"en":"Why choose us ?","fr":"Pourquoi nous choisir ?","it":"Perché scegliere noi?"}],[{"en":"Here are the main values that will lead you to choose ELGATEK for your IT project:","fr":"Voici les principales valeurs qui vous amèneront à choisir ELGATEK pour votre projet Informatique :","it":"I valori chiave che portano a scegliere ELGATEK per il vostro progetto IT:"}],[{"en":"CREATIVITY & INNOVATION","fr":"CRÉATIVITÉ & INNOVATION","it":"Creatività e Innovazione"}]]';
console.log(str.replace(/\[\{/g, '{').replace(/\}\]/g, '}'));

Categories

Resources