Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Javascript arrayhin muuttuja

noutti [05.03.2017 16:41:55]

#

Kysyn onko mahdollista liittää arrayhyn varia oheisella tavalla ja mikäli ei niin mitä suosittelisitte? push()ia? Ohessa nopeasti kännissä ja läpällä kirjoitetut rivit.

var variaabeli1 = getElementById(yksi).value;
var variaabeli2 = getElementById(kaksi).value;
var variaabeli3 = getElementById(kolme).value;

var karttaObj = {
   variaabeli1 : '1',
   variaabeli2 : '2',
   variaabeli3 : '3'
   };

dartvaneri [05.03.2017 19:27:00]

#

Pitäisi onnistua, toisin sulta puuttuu lainausmerkit getElementById("yksi") kohdasta.

Edit.
Se onnistuu näin:

var muuttuja = "Moi";
var objekti = {};
objekti[muuttuja] = 1;

noutti [05.03.2017 21:45:13]

#

Toimii näemmä noin! Nyt pitäisi saada vielä workkaamaan replace functionin kanssa. Tuleeko replace käskyyn tunkea tuon muuttujan nimi objekti[] sulkeiden sisään vai riittääkö pelkästään [muuttuja]?

EDIT:
Ja kiitos vielä! Pää on ihan solmussa ollut niin unohtuvat kaikki järjenkäytön alkeet!

dartvaneri [06.03.2017 16:16:00]

#

Kerroppa vähän tarkemmin, mitä yrität tehdä. En ainakaan ite ottanut tuosta selkoa.

noutti [06.03.2017 16:42:43]

#

Käytännössä siis inputin kautta lapsi pystyy kirjoittamaan sanan, jolla korvataan tarinasta tietyt sanat. Replace() funktiolla ajattelin gi:n avulla suorittaa. Koska sanat ovat käyttäjän syöttämiä lataan ne arrayhyn joissa on valmiiksi vastinpari.

Metabolix [06.03.2017 17:58:21]

#

Objektin käyttäminen ei edistä tuota ratkaisua millään tavalla. Siistimpää on merkitä korvattavat tekstit suoraan inputteihin, jolloin korvaukseen riittää yksinkertainen silmukka.

<div id="tarina">
	{s1} meni {s2}{s3}, koska {s2} oli loppunut ja {s1} tarvitsi sitä.
</div>
<ul>
<li><input class="korvaus" name="{s1}" value="Mimmi">
<li><input class="korvaus" name="{s2}" value="maito">
<li><input class="korvaus" name="{s3}" value="kauppaan">
<li><button id="korvaus">Korvaa</button>
</ul>
<script type="text/javascript">
	var tarina = document.querySelector("#tarina")
	var korvaus_input = document.querySelectorAll("input.korvaus")
	var korvaus_button = document.querySelector("#korvaus")
	tarina.dataset.alkuteksti = tarina.textContent
	function korvaus() {
		var s = tarina.dataset.alkuteksti
		var korvaus = document.querySelectorAll("input.korvaus")
		for (var i = 0; i < korvaus.length; ++i) {
			var re = new RegExp(korvaus[i].name, "g")
			s = s.replace(re, korvaus[i].value)
		}
		tarina.textContent = s
	}
	korvaus()
	korvaus_button.addEventListener("click", korvaus)
</script>

Voi myös tehdä tekstin niin, että jokainen muokattava kohta olisi omassa tagissaan contentEditable-attribuutin kera, ja yhden kohdan muokkaaminen muuttaisi kaikkia muitakin samanlaisia.

<div id="tarina">
	Kun <kbd>noutti</kbd> koodaa <kbd>kännissä</kbd>, hän <kbd data-alkuteksti="menee-1">menee</kbd> Putkaan.
	Kun <kbd>noutti</kbd> riehuu <kbd>kännissä</kbd>, hän <kbd data-alkuteksti="menee-2">menee</kbd> putkaan.
</div>
<script type="text/javascript">
	var arr = document.querySelectorAll("#tarina kbd")
	var obj = {}
	function muokkaus() {
		var s = this.dataset.alkuteksti
		for (var i = 0; i < obj[s].length; ++i) {
			obj[s][i].textContent = this.textContent
		}
	}
	for (var i = 0; i < arr.length; ++i) {
		var s = arr[i].textContent
		if (!arr[i].dataset.alkuteksti)
			arr[i].dataset.alkuteksti = s
		obj[s] = obj[s] || []
		obj[s].push(arr[i])
		arr[i].addEventListener("input", muokkaus)
		arr[i].contentEditable = true
	}
</script>

noutti [06.03.2017 20:06:19]

#

Kiitoksia vastauksista! Tutkailen huomenna meininkiä. Eiköhön noilla pääse jo jyvälle!

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta