JavaScript - odwołanie się do elementu

0

Witam

Mecze się od kilku dni i nie wiem jak pobrać zawartość taga, a mianowicie mamy taką strukturę:

<div class="test1">
    <div id="item1">A1
      <div class="A">111</div>
      <div class="B">222</div>
      <div class="C">333</div>
    </div>
    <div id="item2">A2
      <div class="A">111</div>
      <div class="B">222</div>
      <div class="C">333</div>
    </div>
</div>

W takiej strukturze nie wiem ile jest itemow i czy są itemy ale jeśli jest jakiś chce z niego pobrać element A B lub C w zasadzie wszystko będę sumować (item1 A1) + (item2 A2) itd... wpadłem na takie mniej więcej rozwiązanie:

for (var xx=0;xx<=100;xx++){
   var x = $('.test1').children().eq(xx);
   if(x.length) {
        alert('Znaleziono ' + x.length + ' elementów.');
        $('.test1').children().eq(xx).css("background-color","red");
   }
}

niestety nie wiem jak się odwołać do klasy wewnątrz A B lub C czy w dobra stronę idę czy może jest inne łatwiejsze rozwiązanie?

0
mgs_saladin napisał(a)

niestety nie wiem jak się odwołać do klasy wewnątrz A B lub C czy w dobra stronę idę czy może jest inne łatwiejsze rozwiązanie?

Odwolac sie mozesz korzystac z funkcji attr() - np. attr('class');

Nie jestem jednak pewien, co chcesz osiagnac? Jaki jest cel tego kodu, co probujesz napisac?

0

w pliku index.htm dodajesz:

<script type="text/javascript" src="http://www.pengoworks.com/workshop/jquery/calculation/jquery.calculation.min.js"></script> 

a w kodzie jQuery piszesz tak:

$(function(){
	
	alert ($('.A, .B, .C').sum() );
		
});
 
0

Spróbuje inaczej to wytłumaczyć:

Mamy zbiór itemów:

Item1 Item2 Item3 Item4….

I te elementy będą w kontenerach o nazwie (test1 test2 test3) itd… będą zmieniały swoje położenie metodą drag&drop tak więc do np.

Przykładowo kontenera(test1) będę miał przypisany
Item1
Item3

Do kontenera 2 będę miał przypisany
Item2
Item4

I chce sprawdzać po danej akcji każdy kontener z osobna i sumować wyniki, dane jakie bym pobierał były by w tych itemach (A,B,C) i np. z Itemu1 pobrał bym zawartość taga A czyli liczbę 111 i z Itemu3 to samo 111 i podsumował to jako wynik całego kontenera to samo z kontenerem nr.2

Kontenerów będzie 12 a itemów możliwe ze i 500 (dynamicznie będą dodawane)

0

Hmm, cos takiego np?

for (i = 0; i < $('.container').length; i++)
{
	value = 0;

	$('div', $('.container:eq(' + i + ')')).each(function()
	{
		value += parseInt($(this).text());
	});

	alert(value); // suma
}

Kazdemu kontenerowi nadaj klase container.

P.S. Kod pisany z palca - nie gwarantuje, ze dziala bo nie sprawdzalem ;)

0

niestety nie działa

alert = NaN

i nie ma odwołania do klasy "A"

<div class="container">
 <div id="item1">A1
  <div class="A">111</div>
  <div class="B">222</div>
  <div class="C">333</div>
 </div>
 <div id="item3">A3
  <div class="A">111</div>
  <div class="B">222</div>
  <div class="C">333</div>
 </div>
</div>
0

Przede wszystkim: musisz rozroznic pojecie "tag" a "klasa". To dwie rozne rzeczy!
Po drugie - listy powinienes tworzyc w oparciu o znaczniki <li> oraz <ul> - a nie na samych divach.

Oto kompletny kod (testowany):

<script src="http://4programmers.net/template/js/jquery.js" type="text/javascript"></script>

<ul class="container">
	<li>1</li>
	<li>2</li>
	<li>3</li>
</ul>

<ul class="container">
	<li>4</li>
	<li>5</li>
	<li>6</li>
</ul>

<script type="text/javascript">

$(document).ready(function()
{
	for (i = 0; i < $('.container').length; i++)
	{
			value = 0;
	 
			$('li', $('.container:eq(' + i + ')')).each(function()
			{
					value += parseInt($(this).text());
			});
	 
			alert(value); // suma
	}
});

</script>
0

Przepraszam wprowadziłem w mały błąd chodziło mi o klasę dokładnie "A" a teraz pytanie jak pobrać tylko z "A" wartość bo w tej chwili wychodzą dziwne liczby

<script src="http://4programmers.net/template/js/jquery.js" type="text/javascript"></script>

<ul class="container">
    <li><div class="A">1000</div>1</li>
    <li><div class="A">1000</div>2</li>
    <li><div class="A">1000</div>3</li>
</ul>

<ul class="container">
    <li><div class="A">1000</div>4</li>
    <li><div class="A">1000</div>5</li>
    <li><div class="A">1000</div>6</li>
</ul>

<script type="text/javascript">

$(document).ready(function()
{
        for (i = 0; i < $('.container').length; i++)
        {
                        value = 0;

                        $('li', $('.container:eq(' + i + ')')).each(function()
                        {
                                        value += parseInt($(this).text());
                        });

                        alert(value); // suma
        }
});

</script>
1

Nie rozumiem, po co ten <div> w elemencie <li>? Jezeli chcesz pobrac elementy <li> zawierajace klase o nazwie A, selektor musi wygladac tak: li[class=A]:

<script src="http://4programmers.net/template/js/jquery.js" type="text/javascript"></script>

<ul class="container">
	<li class="A">1</li>
	<li>2</li>
	<li>3</li>
</ul>

<ul class="container">
	<li>4</li>
	<li>5</li>
	<li>6</li>
</ul>

<script type="text/javascript">

$(document).ready(function()
{
	for (i = 0; i < $('.container').length; i++)
	{
			value = 0;
	 
			$('li[class=A]', $('.container:eq(' + i + ')')).each(function()
			{
					value += parseInt($(this).text());
			});
	 
			alert(value); // suma
	}
});

</script>
0

Właśnie ja nie chce pobierać bezpośrednio zawartości tylko pewien zbiór zawarty w nim danych chce stworzyć coś podobnego do obiektu w "Javie/C++" gdzie jest całym obiektem a

wewnątrz metodą z której pobieram dany zbiór i w danym momencie mogę chcieć "A" w innym wypadku będę odwoływał się do innego diva np. "B"</p>
<li>
  <div class="A">11</div>
  <div class="B">22</div>
  <div class="C">33</div>
</li>

dziękuje teraz mnie olśniło dzięki za naprowadzenie

$(document).ready(function()
{
        for (i = 0; i < $('.container').length; i++)
        {
                        value = 0;

                        $('li .A', $('.container:eq(' + i + ')')).each(function()
                        {
                            alert($(this).text());
                            value += parseInt($(this).text());
                        });

                        alert(value); // suma
        }
});
0

Ok. Co prawda nadal nie wiem jakie to ma miec zastosowanie, ale w takim razie selektor musi wygladac tak: li:has(div[class=A]).

0

chce żaglować danymi w zasadzie mógł bym stworzyć jakąś tablice z której bym pobierał odpowiednie dane ale bardziej odpowiednie wydawało mi się stworzenie danych od razu przyczepionych do itemu

1 użytkowników online, w tym zalogowanych: 0, gości: 1