לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 29-12-2010, 22:41
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי ©od© שמתחילה ב "הבהרה/בחירה/סימון/highlight selction"

קרא: http://www.quirksmode.org/dom/range_intro.html
ותראה ותתנסה: https://2010-uploaded.fresh.co.il/2...9/60361406.html
במסמך ה-html שהעלתי, תסמן טקסט ותוכל לראות את קוד ה-HTML שסימנת בחלון שנוצר מפונקציית alert.
שים לב שהדפדפן מבצע תיקון של קוד ה-HTML במקרה שהסימון שעשית כולל HTML לא תקין. (בדיוק כפי שכתוב בקישור הראשון שכתבתי לך לקרוא)
הקוד היחידי שהוספתי (ושאינו נמצא בקישור הראשון הנ"ל) זה:
קוד:
document.getElementById("test").onmouseup = function() { var outObj= document.getElementById("output"); // ... var cobj = rangeObject.cloneContents(); outObj.appendChild(cobj); alert(outObj.innerHTML) outObj.innerHTML = ''; // reset return false; }

עריכה:
אגב שים לב כאן שתוכל לגשת לאלמנטים\תגים שעוטפים את הטקסט המסומן בעזרת המאפיינים startContainer ו- endContainer, וכמובן בעזרת parentNode, בצורה הבאה:
קוד:
rangeObject.startContainer.parentNode // the parent node of the (usually) text node that starts the user selection range

נערך לאחרונה ע"י dorM בתאריך 29-12-2010 בשעה 22:49.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 30-12-2010, 19:11
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 4 שנכתבה על ידי ©od© שמתחילה ב "תודה רבה! אני חושב שהבעיה..."

אני חושב שאין שום מתודה או חבר מחלקה שבעזרתו ניתן להשיג את הקוד ה-"נקי" (אך לא בהכרח תקין) שאתה מחפש.

אבל ננסה לחשוב קצת:

אנחנו יודעים שההשלמה מתרחשת כאשר המשתמש בוחר טקסט,
כלומר כאשר יש text node בתחילת הבחירה של המשתמש וגם בסוף הבחירה שלו,
שזה מה שקורה בדרך כלל.

מטרת ההשלמה שהדפדפן עושה זה לתקן את קוד ה-HTML,
כך שלדוגמא אם יש את קוד ה-HTML הבא:

קוד:
<a1> <a2>Hello</a2> World </a1>

והמשתמש בחר text node משני צידי ה-Range, (לדוגמא בחר ello</a2> Wo)
אז לא הגיוני שייתווספו תגים בצידי הטקסט כי הרי ידוע לנו שהוא בחר text node בעזרת rangeObject.startContainer ו- rangeObject.endContainer (זו הסיבה שציינתי אותם בסוף ההודעה שלי)
לכן פשוט נוריד את התגים שבהתחלה\סוף בהתאם לשאלה: האם קיבלנו text node בצידי ה-range ?
לא משנה כמות התגים - פשוט נוריד אותם מהמחרוזת
(ולא מה-DOM tree כי זה אמור להוריד לך הכל, כולל התוכן שהמשתמש סימן..)
אם ידוע לנו שיש text node.

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

נערך לאחרונה ע"י dorM בתאריך 30-12-2010 בשעה 19:14.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 02-01-2011, 22:15
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 9 שנכתבה על ידי ©od© שמתחילה ב "למה אי אפשר פשוט לעשות משהוא..."

לפי מה שהבנתי אתה מתייחס למשתנה t בתור האובייקט שהמשתמש סימן.
אי אפשר לעשות את זה פשוט כי זה לא עובד ככה.

כשמשתמש מסמן משהו במסמך, הוא לא מסמך דבר אחד, אלא טווח.
הטווח מתחיל בנקודה אחת ומסתיים בנקודה שנייה.
כל נקודה מכילה אלמנט ספציפי, וכשמדובר ב-text node אז יש גם את ההיסט מתחילת האובייקט שבו מתחיל\נגמר הטווח.
אובייקט ה- text node מסמל "תג" בלתי נראה שבו מוכל הטקסט.
לדוגמא במקום לכתוב:
קוד:
<p>Hello world!</p>

אפשר לראות את זה ככה:
קוד:
<p><text content="Hello world!" /></p>

כשסימון הטקסט מתחיל באות e של המילה Hello, אז הדפדפן מצביע על ה- text node הנ"ל כשההיסט (או אינדקס?) הוא 1.

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

משתני המחלקה rangeObject.startContainer ו- rangeObject.endContainer אלו למעשי האובייקטים (או "נקודות" כפי שכתבתי בתחילה) שסומנו בקצות הטווח.
זה כמו לעשות:
קוד:
document.getElementById('element_name')

ולכן ניתן להשתמש ב-parentNode כדי לזהות את אלמנט האב של ה-"נקודות" הנ"ל,
ובאופן זה גם נוכל להוריד מהמחרוזת את התגים.

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

נסה לקרוא גם את העמוד שקישרתי אליו: http://www.quirksmode.org/dom/range_intro.html
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 02:20

הדף נוצר ב 0.07 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר