ABA


"איך מעלימים אובייקט בעזרת JS כשיש הרבה מאותו שם"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #10192 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10192
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   21:45   21.06.11   
אל הפורום  
  איך מעלימים אובייקט בעזרת JS כשיש הרבה מאותו שם  
 
אני מדבר כמובן על מצב כמו פורום משורשר, בו כל ההודעות מוסתרות, אך לכל ההודעות שם זהה, ואין לי מושג איך אפשר באמצעות JS להעלים ולחשוף הודעות.
יש לולאה המייצרת DIV שלכולם יש CLASS זהה, אם אני משתמש בפונקציה פשוטה להעלמת אובייקט, היא פשוט לא תעבוד, כי צריך ID.
הבעיה הנוספת, היא שאני לא יכול להשתמש בJQUERY ודומיו, רק JS טהור.
אני בטוח שידעתי פעם את התשובה, אבל אני אשמח לתזכורת..

תודה רבה!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אבל ענית לעצמך... CaTz 21.06.11 22:34 1
     כשאני עושה את זה כל הפעולות יתבצעו על אותו DIV asco88  21.06.11 22:50 2
         פשוט מאוד: Ice Cold  22.06.11 08:03 3
             תודה, תודה רבה. asco88  22.06.11 09:26 4
                 למעשה זה עובד אבל לא כל כך עוזר asco88  22.06.11 10:56 5
                     את זה אתה לא יכול. איך תדע בדיוק את מי לשנות? Ice Cold  22.06.11 12:55 6
                     תראה אתה צריך משהו שאתה יודע bloodkiller 22.06.11 13:14 7
                         ככה בדיוק, asco88  22.06.11 14:24 8
                             כמה אובייקטים בפנים יש? אחד בלבד או כמה? bloodkiller 22.06.11 15:30 9
                                 לא כל כך הבנתי/הסתדרתי.. asco88  22.06.11 16:14 10
                                     כנס bloodkiller 22.06.11 16:21 11
                                         זה עובד רק במקרה יחידי asco88  22.06.11 16:57 12
         אממ..חשבתי שזה היה ברור...הסבר אולי מפורט יותר... CaTz 22.06.11 17:17 13
             כמו שכתבתי בתגובה 12 asco88  22.06.11 19:36 14
                 שוב...בלי להעליב... CaTz 22.06.11 23:21 15
                     לא רציתי להלאות בקודים אבל הנה: asco88  22.06.11 23:39 16
                         בדיוק כמו שאמרתי לך למעלה.... CaTz 23.06.11 00:11 17
                             רק עכשיו הבנתי כמה יצאתי טמבל... asco88  23.06.11 07:52 18

       
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   22:34   21.06.11   
אל הפורום  
  1. אבל ענית לעצמך...  
בתגובה להודעה מספר 0
 
   שים ID יחודי לכל DIV... ואז אתה יכול לגשת אליו עם

document.getElementById("Div uniqe ID")


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   22:50   21.06.11   
אל הפורום  
  2. כשאני עושה את זה כל הפעולות יתבצעו על אותו DIV  
בתגובה להודעה מספר 1
 
גם אם יש 20 DIV באותו ID, כל קריאה לפונקציה תפעל על הDIV הראשון בדף, ולא על הנכון.
השאלה שלי, היא בעצם, איך לפנות לאותו DIV שהודפס עם הקריאה לפונקציה.
למשל:

function display()
{
document.getElementById("p1").style.display="none";
}

function visibility()
{
document.getElementById("p2").style.visibility="hidden";
}


for($i=0;$i<5;$i++)

echo "

<p id='p1'>text.</p>
<p id='p2'>text.</p>

<input type='button' onclick='display()'/>
<input type='button' onclick='visibility()'/>

";

הקוד הזה ידפיס 5 פעמים את אותו DIV ועל אף השימוש בID ייחודי, הפונקציה תפעל רק על הראשון שהודפס.
אני רוצה שהפונקציה תדע לזהות מהו הID שבאמת מתאים ללחיצה.

תודה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   08:03   22.06.11   
אל הפורום  
  3. פשוט מאוד:  
בתגובה להודעה מספר 2
 
תעביר this כפרמטר לפונקציה:


<script>
function hide(obj)
{
obj.style.display = "none";
}
</script>

<div id="a1" onclick="hide(this)">Div 1</div>
<div id="a1" onclick="hide(this)">Div 2</div>
<div id="a1" onclick="hide(this)">Div 3</div>

כשאתה מעביר this לפנקציה באירוע לחיצה, הוא בעצם מעביר את עצמו, וזה לא משנה מה ה-ID שלו או כל פרמטר אחר. ואז אתה תפוס את ה-obj הזה בתוך הפונקציה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   09:26   22.06.11   
אל הפורום  
  4. תודה, תודה רבה.  
בתגובה להודעה מספר 3
 
הצלחתי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   10:56   22.06.11   
אל הפורום  
  5. למעשה זה עובד אבל לא כל כך עוזר  
בתגובה להודעה מספר 4
 
אני מעוניין להשפיע על DIV אחר שהודפס באותה לולאה, להעלים את אותו DIV פשוט שולט באותו אחד. אך התוכן נמצא באחד אחר.

תודה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   12:55   22.06.11   
אל הפורום  
  6. את זה אתה לא יכול. איך תדע בדיוק את מי לשנות?  
בתגובה להודעה מספר 5
 
מה אתה רוצה לשנות? אחד למעלה? אחד למטה? 4 ימינה?
כמו שאתה לא יודע - גם הקוד לא יודע...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bloodkiller
חבר מתאריך 23.9.03
295 הודעות
   13:14   22.06.11   
אל הפורום  
  7. תראה אתה צריך משהו שאתה יודע  
בתגובה להודעה מספר 5
 
   תגיד מה הידע בתוך הDIV הנבחר שיש לך על הDIV שברצונך להעלים.

בגדול נגיד ואתה יודע במרחק כמה אובייקטים הDIV הזה מהDIV עם הכפתור.
או לדוגמה שאתה יודע שהוא הרביעי במשהו כגון זה:
<div id = "start">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>

נגיד ואתה יודע שאתה צריך לפנות לרביעי גם אפשרי - רק תגיד מה הידע שיש לך ונתן לך פתרון הולם.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   14:24   22.06.11   
אל הפורום  
  8. ככה בדיוק,  
בתגובה להודעה מספר 7
 
יש לי DIV שבתוכו DIV אחר.
את האחר אני רוצה להעלים ולהציג במידה ואני לוחץ על הDIV החיצוני.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bloodkiller
חבר מתאריך 23.9.03
295 הודעות
   15:30   22.06.11   
אל הפורום  
  9. כמה אובייקטים בפנים יש? אחד בלבד או כמה?  
בתגובה להודעה מספר 8
 
   שיטה שתעבוד לדעתי
<div>
<a onclick="hideDiv(this);">click here</a>
<div>This we want to hide</div>
</div>

עכשיו אתה עושה בJS

hideDiv(elem)
{
mainDiv = elem.parentNode;
hideDiv = mainDiv.getElementsByTagName("div");
hideDiv.style.visibility = "hidden";
}

משהו בסגנון הזה.
קודם כל עוברים מן האובייקט ששלחנו אל הדיב המורחב ובתוכו נמצא את הDIV על ידי איסוף כלל האלמנטים ע"י סוג האלמנט.

אפשר גם פשוט לעבור אלמנט אחד אחד עד שיהיה אחד שהינו DIV ולהעלימו.

אלא אם כן אצלך זה טיפה שונה ואז אני יכול לחשוב על עוד פתרונות.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   16:14   22.06.11   
אל הפורום  
  10. לא כל כך הבנתי/הסתדרתי..  
בתגובה להודעה מספר 9
 
הקוד הזה בJS זאת בעצם פונקציה?
ולא כל כך הבנתי איך אני בעצם מגיע לDIV הנכון, הבנתי שמצאנו פה את הDIV ה"הורה", אבל איך אני מוצא את הצאצא הנכון? אני נותן לו ID של "DIV"?

תודה רבה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bloodkiller
חבר מתאריך 23.9.03
295 הודעות
   16:21   22.06.11   
אל הפורום  
  11. כנס  
בתגובה להודעה מספר 10
 
   הקוד בJS הוא פונקציה, אתה קורא לו כאשר אתה רושם בכפתור שלך Onclick="function(parameters);"

כאשר מצאת את ההורה יש פונקציה בJS שמוצא אובייקט לפי פרמטרים כלשהם.
יש getElementById ואז נמצא אחד בודד.
יש getElementsByTagName ואז נמצא את כלל האלמנטים שהם בעלי הTAG הנ"ל זה אומר כלל האלמנטים מסוג לדוגמה Div או מסוג img.

כאשר אתה מצאת את אלמנט האב ועושה fatherElem.getElementsByTagName בעצם אתה מוצא תחת אותו אלמנט אב את כלל האלמנטים שהם מסוג DIV.

בגלל שלא כמו ID יש אפשרות לכמה אובייקטים במרחב הזה בעלי הTAG הקרוי DIV, מה שנקבל זה מערך שכל תא במערך זהו אחד האלמנטים הנ"ל.

מכיוון ובמקרה שאתה תיארת יש רק אלמנט אחד מסוג זה, אנו יודעים שצריך לפנות לתא הראשון במערך וזהו 0.

לאחר מכן אתה ניגש אליו להחביא אותו, יש לו Attribute בשם visibility שזה נראות, נמצא תחת Style וזה בעצם העיצוב של האובייקט כפי שנעשה בCSS אלא שכעת זה בעזרת JS.

אתה משנה ערך זה לHidden או None ובכך מסתיר את האובייקט.

מקווה שעזרתי.



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   16:57   22.06.11   
אל הפורום  
  12. זה עובד רק במקרה יחידי  
בתגובה להודעה מספר 11
 
אבל במקרה שקיימים שניים ומעלה זה כבר לא עובד.
ניסיתי לתת אינדקס של ולא עבד, אז השתמשתי ב וזה עבד.
אבל כשהכנסתי ללולאה, כלום לא עבד:

function showDiv(elem)
{
mainDiv = elem.parentNode;

hideDiv = mainDiv.getElementsByTagName("div");

hideDiv.style.visibility = "visible";

}

function hide(obj)
{
obj.style.visibility = "hidden";
}


עשיתי ככה כדי להציג ולהעלים

ועשיתי מן לולאה כזאת, רק לבדיקה:


<?php

for($i=0;$i<5;$i++)

echo "

<div onclick='showDiv(this);'>click here</div>

<div id = 'div' onclick='hide(this)'> Clickkk!</div>

</div>


";
?>

ברגע שהשתמשתי בפונקציות בלי לולאה, עבד יופי, ברגע שהכנסתי ללולאה, כלום כבר לא עבד.

תודה רבה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   17:17   22.06.11   
אל הפורום  
  13. אממ..חשבתי שזה היה ברור...הסבר אולי מפורט יותר...  
בתגובה להודעה מספר 2
 
   אתה יכול להביא דוגמא של מבנה הDIVים הסופי שלך... ומה אתה רוצה להציג ומה להעלים?

כנראה שלא הכי הבנתי...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   19:36   22.06.11   
אל הפורום  
  14. כמו שכתבתי בתגובה 12  
בתגובה להודעה מספר 13
 
זה המקרה המדויק בו אני מעוניין
למעשה, אפשר לראות גם בפורום כמו תפוז:
http://www.tapuz.co.il/Forums2008/ForumPage.aspx?ForumId=388&r=1
למרות שבתפוז נראה כאילו הוא טוען כל הודעה, אני מעוניין פשוט אותו דבר רק בלי לטעון כל פעם מחדש.

תודה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   23:21   22.06.11   
אל הפורום  
  15. שוב...בלי להעליב...  
בתגובה להודעה מספר 14
 
   מה המקרה המדוייק שלך?

לא מסובך להביא כמה DIVים...ולהסביר קצת...

לא חוכמה להגיד כמו בתפוז...רק לא אותו הדבר...חח


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   23:39   22.06.11   
אל הפורום  
  16. לא רציתי להלאות בקודים אבל הנה:  
בתגובה להודעה מספר 15
 
יש פה העתק מדויק של קטע מהאתר:


$tableName = db_perfix . '_' . 'forum_topics_info';

$query = mysql_query("SELECT * FROM $tableName WHERE topic_parent = '0' order by topic_id DESC")

or die (mysql_error());

echo "<a href = 'index.php?page=new_massage&type=top&topic=0'>| New Topic |</a><br><br>";

while($row = mysql_fetch_array($query))
{

echo "<div class = 'forum_sub'>";

echo " + </a>",$row,"<a href = 'index.php?page=forum&type=top&topic=",$row,"sub=",$row,"'>| Response |</a>";

echo " <div id='forum_content' class='hidden'>",$row,"</div>";

echo "</div>";

$result = findChilds($row);

}

כפי שאפשר לראות הקוד פה ב50% עבודה בקושי, כשנתקלתי בקושי הזה, לא התחשק לי להמשיך.
אבל בעיקרון הפונקציה בפנים יוצרת שרשור של הפורום ומדפיסה הודעות המורכבות מכותרת + הודעה, כמו בקוד פה, רק שפה זה כותרת ראשית של נושא.

יש פה: forum_sub ו forum_content.
אני מעוניין שבטעינת העמוד, יראו רק את ה forum_sub לפי הסדר, ואפשר יהיה ללחוץ על הכותרת וייפתח ה forum_content המתאים.
הכלל הזה תקף גם להודעות שבתוך הפונקציה, אך זה לא רלוונטי כרגע, כי הם עובדות בדיוק על אותו עיקרון.

תודה רבה על תשומת הלב והעזרה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
CaTz
חבר מתאריך 2.10.04
14537 הודעות
   00:11   23.06.11   
אל הפורום  
  17. בדיוק כמו שאמרתי לך למעלה....  
בתגובה להודעה מספר 16
 
  

<div class = 'forum_sub' onclick='toggle(CHILD_QUNIQE_ID_".$row.")'>

echo "<div id='forum_content' class='hidden' id='CHILD_QUNIQE_ID_".$row."'>",$row,"</div>";



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   07:52   23.06.11   
אל הפורום  
  18. רק עכשיו הבנתי כמה יצאתי טמבל...  
בתגובה להודעה מספר 17
 
זה כל כך פשוט שאני לא מבין איך לא תפסתי את זה לבד.. תודה רבה, סוף סוף הצלחתי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net