ฉันจะประมวลผลตัวอักษรแต่ละตัวโดยใช้ Javascript ได้อย่างไร


361

ฉันต้องการแจ้งเตือนตัวอักษรแต่ละตัวของสตริง แต่ฉันไม่แน่ใจว่าจะทำอย่างไร

ดังนั้นถ้าฉันมี:

var str = 'This is my string';

ฉันต้องการแยกเตือน T, h, i, s และอื่น ๆ นี่เป็นเพียงจุดเริ่มต้นของความคิดที่ฉันกำลังทำงานอยู่ แต่ฉันต้องรู้วิธีการประมวลผลจดหมายแต่ละฉบับแยกกัน

ฉันต้องการใช้ jQuery และคิดว่าฉันอาจต้องใช้ฟังก์ชั่นแยกหลังจากทดสอบความยาวของสตริง

ไอเดีย?


3
บางทีคุณอาจจะกำลังหานี้ ณ ES6 for(const c of str) { ... }มี เพิ่มเติมจากด้านล่างนี้ในคำตอบที่ค่อนข้างละเอียด แต่ไม่ upvoted อย่างเพียงพอ PS: @ ลิงก์ของ ARJUN นั้นใช้งานไม่ได้สำหรับฉัน
Max

คำตอบ:


419

หากลำดับการแจ้งเตือนมีความสำคัญให้ใช้สิ่งนี้:

for (var i = 0; i < str.length; i++) {
  alert(str.charAt(i));
}

หากลำดับการแจ้งเตือนไม่สำคัญให้ใช้สิ่งนี้:

var i = str.length;
while (i--) {
  alert(str.charAt(i));
}


2
การใช้[]เพื่อรับอักขระในตำแหน่งเฉพาะไม่ได้รับการสนับสนุนใน IE <9
vsync

13
ดังที่กล่าวไว้ในคำตอบอื่น ๆ คุณสามารถใช้ str.charAt (i) แทน [] สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่คุณควรใช้ charAt vs [] ดูที่string.charAt (x) หรือ string [x]
Julian Soro

12
ฉันคิดว่ามันยากที่จะเชื่อว่าคอมไพเลอร์ JS สมัยใหม่จะคำนวณความยาวอีกครั้งหากสตริงไม่ได้ถูกแก้ไขภายในลูป ในภาษาอื่นทุก ๆ ภาษาฉันมีความสุขที่จะทำการตรวจสอบความยาวในประโยคทดสอบ for for โดยสมมติว่าคอมไพเลอร์รู้ดีที่สุดและจะปรับให้เหมาะสมตามนั้น
ระดับ

3
@Dagmar: Javascript ไม่ได้ใช้ UTF-8 แต่ใช้ UTF-16 (หรือ UCS-2 ขึ้นอยู่กับเบราว์เซอร์) อักขระทุกตัวสามารถแสดงเป็น UTF-8 หรือ UTF-16 ได้ แต่ไม่มีปัญหานี้ คนเดียวที่มีปัญหาคือคนที่ต้องสี่ไบต์ใน UTF-16 มากกว่าสองไบต์ 💩เป็นอักขระที่ต้องใช้สี่ไบต์ใน UTF-16 คำสำคัญสำหรับค้นหาข้อมูลเพิ่มเติมคือ "ระนาบคล้ายดาว", "ไม่ใช่ BMP" และ "คู่แทน"
hippietrail

1
@Dagmar: ทั้ง Java และ Javascript มี UTF-16 (ชื่อเดิมคือ UCS-) เหมือนกัน แพลตฟอร์มหลักที่สามที่ใช้เป็น Windows โปรโตคอล Unix, MacOS และอินเทอร์เน็ตใช้ UTF-8 charAtเหลือจาก UCS-2 วันเมื่อไม่มีคู่ตัวแทนและเพื่อแก้ไขปัญหาที่มีฟังก์ชั่นใหม่codepointAtถูกเพิ่มไปยัง JavaScript ที่จัดการกองพูมิตรของเราอย่างถูกต้อง ฉันเชื่อว่า Java ก็มีเช่นกัน
hippietrail

240

มันอาจจะมากกว่าแก้ไข เพียงแค่ต้องการมีส่วนร่วมกับโซลูชันง่ายๆอื่น:

var text = 'uololooo';

// With ES6
[...text].forEach(c => console.log(c))

// With the `of` operator
for (const c of text) {
    console.log(c)
}

// With ES5
for (var x = 0, c=''; c = text.charAt(x); x++) { 
    console.log(c); 
}

// ES5 without the for loop:
text.split('').forEach(function(c) {
    console.log(c);
});

4
ตัวอย่างสุดท้ายสามารถเป็นได้[...text].forEach(console.log)
Govind Rai

10
ไม่มันไม่สามารถ forEach()ผ่านดัชนีและอาร์เรย์เป็นอาร์กิวเมนต์ที่สองและสาม ฉันจะไม่บันทึกว่า ..
นาย Goferito

1
โปรดทราบว่าทั้งตัวดำเนินการสเปรด (ตัวอย่างแรก) และการโทรแยก (ตัวอย่างล่าสุด) จะสร้างอาร์เรย์ใหม่ โดยปกติจะไม่เป็นปัญหา แต่อาจมีค่าใช้จ่ายสูงสำหรับสตริงขนาดใหญ่หรือการใช้งานบ่อย
Randolpho

แล้วfor (let c of [...text]) { console.log(c) }
Flimm

เมื่อคุณสร้างอาร์เรย์ใหม่จากสตริง ฉันไม่เห็นประโยชน์ let c of textทำงานแล้ว
Mr. Goferito

73

ทางออกหนึ่งที่เป็นไปได้ในจาวาสคริปต์บริสุทธิ์:

for (var x = 0; x < str.length; x++)
{
    var c = str.charAt(x);
    alert(c);
}

มันน่าจะดีกว่าถ้ามี var x = 0 และ var c = str.charAt (x)
คนรวย

2
นอกจากนี้ str.length ควรเก็บไว้ในตัวแปรดังนั้นจึงไม่จำเป็นต้องเข้าถึงต่อไป
Eli Gray

8
@EliGrey เป็นสิ่งสำคัญที่ต้องเพิ่มความยาวในตัวแปรหรือไม่? คุณมีเกณฑ์มาตรฐานหรือไม่เมื่อสิ่งนี้ดีกว่าการมีโค้ดน้อยกว่า?
pm_labs

@paul_sns น่าสนใจมีไม่ดูเหมือนจะเล็ก ๆ น้อย ๆที่แตกต่างกันอย่างน้อยในขอบ (0.7ms ความแตกต่างสำหรับอาร์เรย์องค์ประกอบ 10000): jsfiddle.net/carcigenicate/v8vvjoc1/1 อาจไม่ใช่การทดสอบที่สมบูรณ์แบบ แต่ใช้การทดสอบเฉลี่ย 10,000 ครั้ง
Carcigenicate

1
@paul_sns ยังน่าสนใจ Chrome ทำการทดสอบเดียวกันในเวลาประมาณ 2% (~ 5ms เทียบกับ ~ 0.0997ms) และทั้งสองรุ่นให้เวลาเดียวกันดังนั้นดูเหมือนว่า Edge จะไม่ได้รับการปรับให้เหมาะสมที่สุด
Carcigenicate

69

วิธีการประมวลผลตัวอักษรแต่ละตัว (พร้อมการวัดประสิทธิภาพ)

https://jsperf.com/str-for-in-of-foreach-map-2

สำหรับ

คลาสสิกและไกลโดยเป็นหนึ่งเดียวกับที่ประสิทธิภาพมากที่สุด คุณควรไปกับสิ่งนี้หากคุณวางแผนที่จะใช้มันในอัลกอริทึมที่สำคัญด้านประสิทธิภาพหรือต้องใช้ความเข้ากันได้สูงสุดกับเวอร์ชันเบราว์เซอร์

for (var i = 0; i < str.length; i++) {
  console.info(str[i]);
}

สำหรับ ... ของ

สำหรับ ... ของคือES6ใหม่สำหรับตัววนซ้ำ สนับสนุนโดยเบราว์เซอร์ที่ทันสมัยที่สุด มันดึงดูดสายตามากขึ้นและมีแนวโน้มที่จะพิมพ์ผิดพลาดน้อยลง หากคุณกำลังจะสำหรับการนี้ในการประยุกต์ใช้การผลิตที่คุณควรจะใช้อาจ transpiler เหมือนบาเบล

let result = '';
for (let letter of str) {
  result += letter;
}

แต่ละ

ฟังก์ชั่นวิธีการ Airbnb อนุมัติแล้ว ข้อเสียที่ใหญ่ที่สุดของการทำเช่นนี้คือการsplit()ที่สร้างอาร์เรย์ใหม่เพื่อจัดเก็บตัวอักษรแต่ละตัวของสตริง

ทำไม? สิ่งนี้บังคับใช้กฎที่ไม่เปลี่ยนรูปแบบของเรา การจัดการกับฟังก์ชั่นแท้ที่ให้ผลตอบแทนนั้นง่ายกว่าที่จะให้เหตุผลมากกว่าผลข้างเคียง

// ES6 version.
let result = '';
str.split('').forEach(letter => {
  result += letter;
});

หรือ

var result = '';
str.split('').forEach(function(letter) {
  result += letter;
});

ต่อไปนี้เป็นสิ่งที่ฉันไม่ชอบ

สำหรับใน

ต่างจากสำหรับ ... ของคุณได้รับดัชนีตัวอักษรแทนตัวอักษร มันทำงานได้ค่อนข้างแย่

var result = '';
for (var letterIndex in str) {
  result += str[letterIndex];
}

แผนที่

วิธีการใช้ฟังก์ชั่นซึ่งดี อย่างไรก็ตามแผนที่ไม่ได้มีไว้ให้ใช้สำหรับสิ่งนั้น ควรใช้เมื่อต้องการเปลี่ยนค่าภายในอาเรย์ซึ่งไม่ใช่กรณี

// ES6 version.
var result = '';
str.split('').map(letter => {
  result += letter;
});

หรือ

let result = '';
str.split('').map(function(letter) {
  result += letter;
});

1
บนเครื่องของฉันคลาสสิกforลูปจริง ๆ แล้วจะช้าเป็นอันดับสองในขณะfor...ofที่เร็วที่สุด (เร็วกว่าประมาณสามเท่าfor)
John Montgomery

1
มาตรฐานอยู่ที่ไหน ทางออกที่เร็วที่สุดคืออะไร
poitroae

1
@ johnywhy นั่นเป็นสองปีที่แล้วและลิงค์นั้นตายไปแล้วดังนั้นฉันไม่แน่ใจว่าคุณจะคาดหวังให้ฉันปกป้องผลที่ฉันได้รับหรือไม่ การตั้งค่ามาตรฐานใหม่ในตอนนี้เห็นด้วยกับข้อสรุปของ zurfyx แม้ว่าการforวนซ้ำจะเร็วขึ้นเล็กน้อย
John Montgomery

1
@JohnMontgomery ฉันไม่ได้คาดหวังให้คุณทำอะไรเลย เพียงทราบถึงผู้อ่านในอนาคตว่าผลลัพธ์ของคุณแตกต่างจากคำตอบ ฉันเองก็อยากจะรู้ว่าผลลัพธ์ใดที่นำไปใช้กับเบราว์เซอร์ในวันนี้ในปี 2020 ถึงแม้ว่าปี 2018 จะไม่นานมานี้ ลิงค์ไหนตาย?
johny ทำไม

1
@ johnywhy ลิงค์ด้านบนที่มีการทดสอบจริงทั้งหมดคืน 404 ให้ฉัน
John Montgomery

42

ส่วนใหญ่ถ้าไม่ทั้งหมดของคำตอบที่นี่เป็นสิ่งที่ผิดเพราะพวกเขาจะทำลายเมื่อมีตัวละครในสตริงนอก Unicode BMP (Basic สื่อสารได้หลายภาษา Plane) นั่นหมายความว่าทุก Emoji จะถูกหัก

JavaScript ใช้UTF- 16 Unicode สำหรับสตริงทั้งหมด ใน UTF-16 อักขระที่อยู่นอกเหนือ BMP นั้นถูกสร้างขึ้นจากสองส่วนเรียกว่า " Surrogate Pair " และคำตอบส่วนใหญ่ที่นี่จะประมวลผลแต่ละส่วนของคู่เหล่านี้แยกกันแทนที่จะเป็นอักขระเดี่ยว

วิธีหนึ่งใน JavaScript ที่ทันสมัยตั้งแต่อย่างน้อยปี 2016 คือการใช้String iteratorใหม่ นี่คือตัวอย่าง (เกือบ) ตรงจาก MDN:

var string = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A';

for (var v of string) {
  alert(v);
}
// "A"
// "\uD835\uDC68"
// "B"
// "\uD835\uDC69"
// "C"
// "\uD835\uDC6A"


4
สำหรับวิธีการที่ทันสมัยในการแยกสตริงออกเป็นอักขระขณะที่คำนึงถึงคู่ตัวแทนตัวแทนให้ดูที่: stackoverflow.com/a/42596897/527702
hippietrail

20

คุณสามารถลองสิ่งนี้

var arrValues = 'This is my string'.split('');
// Loop over each value in the array.
$.each(arrValues, function (intIndex, objValue) {
    alert(objValue);
})

11
ยังคงเป็นตัวเลือก แต่ไม่แสดง อย่าใส่ jQuery ทุกที่
cagatay

10

อีกหนึ่งโซลูชั่น ...

var strg= 'This is my string';
for(indx in strg){
  alert(strg[indx]);
}

3
หากคุณต้องการถ่านและไม่ใช่ดัชนีมันจะเร็วกว่าที่จะใช้for..ofลูปfor (let ch of t) { alert(ch) }
Shaheen Ghiassy

10

เมื่อฉันต้องการเขียนโค้ดสั้นหรือซับในฉันใช้ "แฮ็ค" นี้:

'Hello World'.replace(/./g, function (char) {
    alert(char);
    return char; // this is optional 
});

สิ่งนี้จะไม่นับบรรทัดใหม่เพื่อที่จะได้เป็นสิ่งที่ดีหรือไม่ดี หากคุณซึ่งจะรวมถึงการขึ้นบรรทัดใหม่แทนที่: กับ/./ /[\S\s]/อีกหนึ่งตอร์ปิโดที่คุณอาจเห็นอาจใช้.split()ซึ่งมีปัญหามากมาย


คำตอบที่ดีที่สุด พิจารณาปัญหาเกี่ยวกับยูนิโค้ดและยังสามารถใช้กับโครงสร้างที่ใช้งานได้กับ. map () ฯลฯ
rofrol

สิ่งเดียวที่ฉันไม่ชอบเกี่ยวกับอันนี้คือเมื่อฉันต้องการเข้าถึงparams พิเศษที่ส่งผ่านไปยังforEachฟังก์ชั่นการโทรกับparams ที่ส่งreplaceมา ถ้าฉันรู้ว่าฉันเป็น ASCII ฉันคิดว่าฉันยังมีกรณีใช้งานsplitอยู่ คำตอบที่ดี แต่!
ruffin

คำตอบนี้มีโบนัสด้วยการเลือกค่าที่คุณจะตรวจสอบก่อนหน้านี้ต่อไป
Fuzzyma

1
ฉันคิดว่าสิ่งนี้จะไม่คำนึงถึงปัญหา Unicode เว้นแต่ว่าจะมีการuตั้งค่าสถานะพร้อมกับการgตั้งค่าสถานะหรือไม่ ตกลงแค่ทดสอบและฉันพูดถูก
hippietrail


8

จะเป็นการดีกว่าถ้าใช้คำสั่ง for ... of หากสตริงมีอักขระยูนิโค้ดเนื่องจากขนาดไบต์แตกต่างกัน

for(var c of "tree 木") { console.log(c); }
//"𝐀A".length === 3

7

คำตอบสั้น ๆ : Array.from(string)จะให้สิ่งที่คุณต้องการและจากนั้นคุณสามารถทำซ้ำมันหรืออะไรก็ตามที่เป็นเพียงอาร์เรย์

abc|⚫️\n⚪️|👨‍👩‍👧‍👧ตกลงขอลองกับข้อความนี้:

codepoints คือ:

97
98
99
124
9899, 65039
10
9898, 65039
124
128104, 8205, 128105, 8205, 128103, 8205, 128103

ดังนั้นอักขระบางตัวจึงมี codepoint หนึ่งตัว (ไบต์) และบางตัวมีสองตัวขึ้นไปและมีการเพิ่มบรรทัดใหม่สำหรับการทดสอบเพิ่มเติม

ดังนั้นหลังจากการทดสอบมีสองวิธี:

  • ไบต์ต่อไบต์ (codepoint ต่อ codepoint)
  • กลุ่มตัวละคร (ไม่ใช่อิโมจิทั้งครอบครัว)

string = "abc|⚫️\n⚪️|👨‍👩‍👧‍👧"

console.log({ 'string': string }) // abc|⚫️\n⚪️|👨‍👩‍👧‍👧
console.log({ 'string.length': string.length }) // 21

for (let i = 0; i < string.length; i += 1) {
  console.log({ 'string[i]': string[i] }) // byte per byte
  console.log({ 'string.charAt(i)': string.charAt(i) }) // byte per byte
}

for (let char of string) {
  console.log({ 'for char of string': char }) // character groups
}

for (let char in string) {
  console.log({ 'for char in string': char }) // index of byte per byte
}

string.replace(/./g, (char) => {
  console.log({ 'string.replace(/./g, ...)': char }) // byte per byte
});

string.replace(/[\S\s]/g, (char) => {
  console.log({ 'string.replace(/[\S\s]/g, ...)': char }) // byte per byte
});

[...string].forEach((char) => {
  console.log({ "[...string].forEach": char }) // character groups
})

string.split('').forEach((char) => {
  console.log({ "string.split('').forEach": char }) // byte per byte
})

Array.from(string).forEach((char) => {
  console.log({ "Array.from(string).forEach": char }) // character groups
})

Array.prototype.map.call(string, (char) => {
  console.log({ "Array.prototype.map.call(string, ...)": char }) // byte per byte
})

var regexp = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g

string.replace(regexp, (char) => {
  console.log({ 'str.replace(regexp, ...)': char }) // character groups
});


7

ตอนนี้คุณสามารถวนซ้ำจุดรหัส Unicode แต่ละอันที่อยู่ใน String โดยใช้String.prototype[@@iterator]ซึ่งจะส่งคืนค่าประเภทสัญลักษณ์ที่รู้จักกันดีSymbol.iterator- ตัววนซ้ำเริ่มต้นสำหรับวัตถุคล้ายอาร์เรย์ ( Stringในกรณีนี้)

รหัสตัวอย่าง:

const str = 'The quick red 🦊 jumped over the lazy 🐶! 太棒了!';

let iterator = str[Symbol.iterator]();
let theChar = iterator.next();

while(!theChar.done) {
  console.log(theChar.value);
  theChar = iterator.next();
}

// logs every unicode character as expected into the console.

ใช้งานได้กับอักขระ Unicode เช่น emoji หรือตัวอักษรที่ไม่ใช่แบบโรมัน

อ้างอิง: MDN เชื่อมโยงไปยัง String.prototype


2
โปรดทราบว่าคุณสามารถทำสิ่งนี้ในลักษณะที่สั้นกว่าด้วยการfor ... ofวนซ้ำรวมถึงสายอักขระ - นั่นคือไวยากรณ์น้ำตาลสำหรับการเข้าถึงตัววนซ้ำ
Aditya MP

6

ตอนนี้คุณสามารถใช้ในคำหลัก

    var s = 'Alien';
    for (var c in s) alert(s[c]);


การใช้ในคือการปฏิบัติที่ไม่ดีและน่ากลัวเมื่อไม่มีการกรองฉันขอแนะนำอย่างยิ่งกับเรื่องนี้
Downgoat

4
@ ลงไปทำไมล่ะ? มีอะไรไม่ดีเกี่ยวกับมัน ฉันหมายถึงถ้าฉันอยู่ในสถานการณ์ที่ฉันรู้ว่า 'ใน' ได้รับการสนับสนุนโดยเครื่องมือ Javascript ของฉันและรหัสของฉันจะไม่พบวิธีในเครื่องมืออื่น ... ทำไมไม่ใช้มัน
TKoL

@TKoL ดูนี้
Alan

@Alan inเป็นส่วนหนึ่งของภาษาที่ถูกต้องตามกฎหมาย ใช้สิ่งต่าง ๆ อย่างเหมาะสม บทความของคุณเตือนว่าจะinตีความคีย์อัลฟ่าเหมือนกับปุ่มตัวเลข ดังนั้น? บางทีนั่นอาจเป็นสิ่งที่คุณต้องการ อาจกล่าวได้ว่าวิธีอื่น ๆไม่สนใจปุ่มตัวอักษร Imo ofมีพฤติกรรมที่ถูกต้อง ในอาร์เรย์ JS องค์ประกอบที่ไม่มีปุ่มอัลฟ่ายังคงมีคีย์: องค์ประกอบที่เป็นตัวเลข ในคอนโซลของฉัน JS "ถูกต้อง" ปฏิบัติกับปุ่มตัวอักษรเหมือนกับปุ่มตัวเลข:>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
johny ทำไม

5

คุณสามารถหาอาเรย์ของตัวละครแต่ละตัวได้

var test = "test string",
    characters = test.split('');

จากนั้นวนซ้ำโดยใช้ Javascript ปกติมิฉะนั้นคุณสามารถวนซ้ำอักขระของสตริงโดยใช้ jQuery โดย

var test = "test string";

$(test.split('')).each(function (index,character) {
    alert(character);
});

5

คุณสามารถแปลงสตริงนี้เป็นอาร์เรย์ของตัวอักษรโดยใช้split()จากนั้นวนซ้ำผ่านมัน

const str = "javascript";
const strArray = str.split('');

strArray.map(s => console.log(s));


เห็นได้ชัดว่าสิ่งนี้ล้มเหลวด้วยอักขระ Unicode และสัญลักษณ์กราฟิก
johny ทำไม

4

หากคุณต้องการทำการแปลงข้อความในระดับตัวอักษรและรับข้อความที่แปลงกลับมาในตอนท้ายคุณจะทำสิ่งนี้:

var value = "alma";
var new_value = value.split("").map(function(x) { return x+"E" }).join("")

ดังนั้นขั้นตอน:

  • แยกสตริงออกเป็นอาร์เรย์ (รายการ) ของอักขระ
  • แมปอักขระแต่ละตัวผ่าน functor
  • เข้าร่วมอาร์เรย์ที่เป็นผลลัพธ์ของตัวอักษรเข้าด้วยกันเป็นสตริงผลลัพธ์

0

ใน JavaScript ของวันนี้คุณสามารถ

Array.prototype.map.call('This is my string', (c) => c+c)

เห็นได้ชัดว่า c + c แสดงถึงสิ่งที่คุณต้องการทำกับ c

ผลตอบแทนนี้

["TT", "hh", "ii", "ss", " ", "ii", "ss", " ", "mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]


อาจเป็นไปได้:[...'This is my string'].map((c)=>c+c)
อลัน

0

สิ่งนี้ควรใช้กับเบราว์เซอร์รุ่นเก่าและด้วยอักขระ UTF-16 เช่น💩

นี่ควรเป็นโซลูชันที่เข้ากันได้มากที่สุด อย่างไรก็ตามมันมีประสิทธิภาพน้อยกว่าการforวนซ้ำ

ฉันสร้างการแสดงออกปกติโดยใช้regexpu

var str = 'My String 💩 ';
var regEx = /(?:[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/g


str.replace(regEx, function (char) {
    console.log(char)
});

หวังว่านี่จะช่วยได้!


คุณหมายถึงอะไรโดย "น้อยกว่า perfomant"? ฉันคิดว่าคุณหมายถึง "ช้าลง" เนื่องจากสอดคล้องกับข้อกำหนดมากกว่าและทำงานได้ดี
hippietrail

-1

คุณสามารถเข้าถึงตัวละครเดียวกับหรือstr.charAt(index) str[index]แต่วิธีหลังไม่ใช่ส่วนหนึ่งของ ECMAScript ดังนั้นคุณควรไปกับอดีต


ฉันจะอยู่ห่างจากที่ น่าเสียดายที่ไม่สามารถใช้ได้กับ IE ทุกรุ่น เชื่อฉัน. ฉันเรียนรู้มันอย่างหนัก
Xavi

3
มันเป็นส่วนหนึ่งของ ECMAScript แต่เฉพาะในรุ่นที่ 5 ออกใหม่ไม่ใช่ที่ 3
kangax

-1

หากคุณต้องการที่จะทำให้ตัวละครแต่ละตัวคุณอาจต้องห่อในองค์ประกอบช่วง;

var $demoText = $("#demo-text");
$demoText.html( $demoText.html().replace(/./g, "<span>$&amp;</span>").replace(/\s/g, " "));

ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดที่จะทำจากนั้นประมวลผลช่วง (ตัวอย่างเช่นกับ TweenMax)

TweenMax.staggerFromTo ($ demoText.find ("span"), 0.2, {autoAlpha: 0}, {autoAlpha: 1}, 0.1);


-1

ลองรหัสนี้

    function myFunction() {
    var text =(document.getElementById("htext").value); 
    var meow = " <p> <,> </p>";
    var i;


    for (i = 0; i < 9000; i++) {

        text+=text[i] ;



    }

    document.getElementById("demo2").innerHTML = text;

}
</script>
<p>Enter your text: <input type="text" id="htext"/>

    <button onclick="myFunction();">click on me</button>
</p>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.