Я бился головой об этом. Я пытаюсь принять пользовательский ввод через форму и распечатать его предложение в обратном направлении. Это не работает, и я не уверен, почему именно.

Я использовал некоторый код из здесь для функции обратной строки.

Я перепробовал множество различных функций обратного преобразования строк, но большинство из них были слишком сложны для понимания, поэтому здесь довольно новичок. :) Любая помощь будет по достоинству оценена.

function myFunction() {
    var sentence, text;
    sentence = document.getElementById("numb")
    sentence = sentence.replace( /^\s+|\s+$/g, " " )
    sentence = sentence.replace( /\s+/g, " " );
    
    var words = sentence.split(" ");a
        words = words.reverse();
        sentence = words.join(" ");
    		document.getElementById("demo").innerHTML = text;
}
<body>
    <p >Spell a sentence backwards.</p>
    <input id="numb">
    <button type="button" onclick="myFunction()">Submit</button>
    <p id="demo"></p>
  </body>

https://jsfiddle.net/7dscpebo/

-2
Chris M Ferguson 28 Авг 2017 в 06:11

5 ответов

Лучший ответ

Простой однострочник, чтобы перевернуть вашу строку:

var forward = "Forward sentence";

var backward = forward.split("").reverse().join("");

console.log(backward);

Разбейте строку на массив ее символов, переверните массив и затем снова соедините его обратно в строку. Получил идею от здесь.

Если вы просто хотите изменить порядок слов в предложении (не самих символов), просто .split() и .join() с пробелом, как показано ниже:

var forward = "Forward sentence";

var backward = forward.split(" ").reverse().join(" ");

console.log(backward);

Я собрал все это вместе в вашем оригинальном примере ниже. Одна из модификаций - использование прослушивателя событий, а не указание функции в onclick, которая иногда может создавать проблемы, такие как это.

function reverseText() {
    var forward = document.getElementById("numb").value;
    var backward = forward.split("").reverse().join("");
    document.getElementById("demo").innerHTML = backward;
}

document.getElementById("btnsubmit").addEventListener("click", reverseText);
<body>
  <p>Spell a sentence backwards.</p>
  <input id="numb">
  <button id="btnsubmit" type="button">Submit</button>
  <p id="demo"></p>
</body>
1
abagshaw 28 Авг 2017 в 16:41

Это не работа для регулярных выражений. Просто зациклите строку и создайте новую строку, символ за символом.

var forward = 'this string is forward';

// create an empty string to fill with characters
var backward = '';

// loop backwards over forward
for (var i = forward.length - 1; i >= 0; i--) {
  backward += forward[i];
}

console.log(backward);

Также вам нужно получить текстовое значение из вашего элемента sentence.

var forward = sentence.value;
1
Soviut 28 Авг 2017 в 03:20

Пожалуйста, смотрите мой комментарий в коде для исправления.

function myFunction() {
    var sentence; //text is not used
    sentence = document.getElementById("numb").value; 
    //Need to get the actual value, not just the DOM
    sentence = sentence.replace( /^\s+|\s+$/g, " " )
    sentence = sentence.replace( /\s+/g, " " );
    var words = sentence.split(" ");
        words = words.reverse();
        sentence = words.join(" ");
    		document.getElementById("demo").innerHTML = sentence;
}
<body>
    <p >Spell a sentence backwards.</p>
    <input id="numb">
    <button type="button" onclick="myFunction()">Submit</button>
    <p id="demo"></p>
  </body>
0
Long Kim 28 Авг 2017 в 03:24

Получите значение поля input , используя document.getElementById('numb').value, и измените его, используя метод #reverse() для массивов:

value.split('').reverse().join('')

Смотрите демо ниже:

function myFunction() {
  var sentence = document.getElementById("numb").value;
  document.getElementById("demo").innerHTML = sentence.split('').reverse().join('');
}
<body>
  <p>Spell a sentence backwards.</p>
  <input id="numb">
  <button type="button" onclick="myFunction()">Submit</button>
  <p id="demo"></p>
</body>
0
kukkuz 28 Авг 2017 в 03:27

Ваши sentence объекты являются HTMLElement, а не строкой javascript, поэтому вы не можете вызывать строковые методы для него. Я думаю, что вы имели в виду что-то вроде

var sentence = document.getElementById("numb")

if (sentence) {
    //get the value of the Input element if it exists
    var sentenceText = sentence.value

    //...the rest of your code would go in here
}
1
Jason 28 Авг 2017 в 03:19