צפיות
תשובות
בעיה ב=JS
שלום לכולם!
בניתי פונק' ב-JS שלוקחת ערכים משדה טקסט ומחפשת שורות עם סימן סולמית.(#)
היא אמורה להחליף אוטומטית שורות עם סימן הנ"ל לשורות ממוספרות…
בתיאוריה של הפונק' הכל טוב ויפה(אני מקווה) אבל בפועל יש בעיה בשורה האדומה.
הודעה השגיאה במוזילה היא:
Error: data[i – 1] has no properties
וב-IE:
Error: 'undefined' is null or not an object
והנה הפונק':
function f1()
{
var txt = document.frm.txt.value
var data = txt.split("n")
for(i=0; i < data.length; i++)
{
if(data[i].charAt(0)=='#')
{
data[i] = data[i].replace("#","<li>")
data[i] += "</li>"
if(data[i-1].charAt(0)!='#'){data[i] = "<ol type="1">" + data[i]}
if(data[i+1].charAt(0)!='#'){data[i] += "</ol>"}
alert(data[i])
}
}
}
תודה לכל העוזרים,
אלברט
27 תשובות
אתה יכול
להשתמש עם indexOf ולעשות ריפלייקס לכל ערך השדה כמו שצריך.
כמה דברים
1. ריפלייס ב-JS צריך לקבל REGEXP בפרמטר הראשון (ע"פ התחביר שלו) לכן כך יהיה הריפלייס:
data[i] = data[i].replace(/#/,"<li>")
2. הריפלייס הזה יחליף רק את ה-# הראשונה שהוא ימצא כי לא הוגדר GLOBAL ב-REGEXP
3. אם אתה עושה ריפלייס עם גלובל או בלעדיו אז אם התו הראשון יהיה # הוא יוחלף על בטוח. לכן אין מצב שהוא יהיה בתחילת השורה
4. (אחרון חביב) האינדקס הראשון במקרה הזה של המערך הוא 0 ולכן באיטרציה הראשונה שאתה עושה הוא לא מוצא את data[i-1] כי זה בעצם מחזיר data[-1] והאיבר הזה לא קיים במערך ולכן אתה מקבל את השגיאה.
נ.ב רצוי להיצמד לERORRים של מוזילה הם יותר מפורטים
לא ממש הבנתי
קודם כל תודה!
שנית, לא הבנתי את הנקודות 1,2,3
תסביר לי בבקשה שוב….
מה זה REGEXP?
מה זה BLOBAL?
תודה,
אלברט
איך?
זה יסביר הכל
קרא על regExp
לא ראיתי את ההודעה שלך וכבר כתבתי..
לא נורא
קראתי
קראתי את המאמר אבל לא ממש הבנתי איך זה אמור להיות קשור לפונק' שלי…?
הפונק' שלי אמורה לעשות כזה דבר:
במקום:
# א
# ב
# ג
ככה:
1. א
2. ב
3. ג
כלומר להחליף את סדרת הסולמיות לקוד הבא:
<ol type="1">
<li>א</li>
<li>ב</li>
<li>ג</li>
</ol>
את כל תגי ה- <li></li> אין בעיה לסדר…
פשוט מחליפים את הסימן # סולמית ל <li>, ואפשר להריץ לולאה על המערך ולהסויף לכל שורה את התג- </li>…
אבל השאלה איך מוסיפים את התג של הרשימה <ol type="1"></ol>?
כי אם לא נוסיף את זה, הרשומה לא תהיה ממוספרת, אלא היא תהיה מנוקדת…
תודה לכל העוזרים,
אלברט
שאלה נוספת:
מה הבדך בין r ל- n?
תודה,
אלברט
n זה שורה חדשה
ו-r זה Curriage return (לחצן האנטר ע"פ הבבילון P-:)
הקשר הוא
שאתה עושה ריפלייס ב-JS והפרמטר הראשון של ריפלייס ב-JS הוא אובייקט REGEXP – עכשיו זה מובן ?
כן כן הבנתי…. תודה!
אבל מה ההבדל בשדה טקסט(textarea)?
כי כשאני עושה split לשדה טקסט עם r אני מקבל את גודל המערך תמיד 1 גם כשיש 10 שורות(אני לא מצליח להבין למה) וכשאני עושה עם n אני מקבל את גודל המערך כגודל השורות…
אפשר קצת הסבר?
תודה,
אלברט
שאלה נוספת
שוב בנושא ה- regExp:
איך מגדירים את האובייקט כרב שורתי?
תןדה,
אלברט
בשני אפשרויות
א. בעת יצירת האובייקט:
var rExp = /pattern/m;
var rExp1 = new RegExp("pattern","m");
ה-m מסמל multiline
ב. ע"י נתינת TRUE למאפיין ה-multiline
var rExp = /pattern/
rExp.multiline=true
תודה רבה! ועוד משהו קטן:
למה ה-replace הזה לא עובד במוזילה וכן עובהד ב-IE?
rs = rs.replace(/^—+/gm,"<hr>")
ואין שום הודעת שגיאה….
תודה,
אלברט
לי זה עבד
הקובץ
נסה לעשות ריפלייס כזה:
tText = tText.replace(/rn/g,"<br />")
(אם זה לא עובד אז נסה להפוך את ה-rn ל-nr)
עוד שאלה
כמובן עדיין בנושא ה- regExp…
יש לי את ה- replace הזה:
rs = rs.replace(/[s](http://[S]+)/gi," <a href="$1" target="_blank">$1</a>")
אבל הבעיה היא שאחרי קישור, השורות שהבאות לפניו ואחריו, הופכות לשורה אחת…
כלומר:
a
b
c
http://www.google.com
d
e
f
הופך ל:
abc http://www.google.com def
מה הבעיה? ואיך מסדרים את זה?
תודה,
אלברט
הבעיה רק במוזילה…..
וגם הריפלייס הקודם לא עובד במוזילה
שוב עובד 😉
ד"א
לדעתי יהיה יותר נכון לכתוב כך את ה-regExp שלך
(/[s]b(http://[S]+)b/gi
ובכך לוודא שהכתובת ניתנה בניפרד ולא כחלק ממילה כמו: "ה-HTTP// מסמל…"
תודה אבל עשיתי ככה:
/((http://[S]+))/gi
אני חושב שזה טוב…
שוב תודה על העזרה
על לא דבר
ואם הבנתי אותך אז כדי שהמשתמש ישים קישורים הוא יצטרך להקיף את הכתובת בסוגריים.
נכון…
כי יש מצב שאולי הוא לא רוצה שהכתובת תהפוך לקישור… אי אפשר להכריח אותו…
אם הוא רוצה קישור הוא יצטרך לשים בסוגריים…