Я бился головой об этом. Я пытаюсь принять пользовательский ввод через форму и распечатать его предложение в обратном направлении. Это не работает, и я не уверен, почему именно.
Я использовал некоторый код из здесь для функции обратной строки.
Я перепробовал множество различных функций обратного преобразования строк, но большинство из них были слишком сложны для понимания, поэтому здесь довольно новичок. :) Любая помощь будет по достоинству оценена.
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/
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>
Это не работа для регулярных выражений. Просто зациклите строку и создайте новую строку, символ за символом.
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;
Пожалуйста, смотрите мой комментарий в коде для исправления.
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>
Получите значение поля 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>
Ваши 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
}
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.