2013-09-12 2 views
2

У меня есть веб-приложение. На одной из страниц я просматриваю идентификаторы элементов HTML, один из которых заканчивается указанной строкой или нет. Каждая функция JS работает на странице, но функция «endsWith» не работает. Я действительно не понял этого. Может ли кто-нибудь помочь?JavaScript-концы с функцией не работает

var str = "To be, or not to be, that is the question."; 
alert(str.endsWith("question.")); 

Указанный выше простой код JS не работает вообще?

+1

Как именно эта проблема связана с JSF? Вы подразумеваете, что когда вы удаляете весь материал JSF (и используете обычную страницу «.html»), эта проблема исчезает? Это невероятно, поскольку JSF фактически не запускается в webbrowser, а на веб-сервере. Я отредактирую ваш вопрос, чтобы избавиться от неуместного шума JSF. Что касается вашей проблемы, внимательно прочитайте список совместимости браузеров https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith. В отношении будущих вопросов, пожалуйста, приложите более тщательный ответ. – BalusC

+0

Успокойтесь @BalusC! JSF имеет функцию, называемую 'endsWith'. Очевидно, что вопросник запутался, см. Http://myfaces.apache.org/core20/myfaces-impl/tlddoc-facelets/fn/endsWith.fn.html. Было действительно полезно включить JSF в вопрос, поэтому мы можем сказать, что они путают функциональность JSF и JavaScript. – Joe

+0

@Joe: Э-э, EL не работает в контексте JS вообще. Спасибо за смех дня, хотя :) Для будущих комментариев, возможно, лучше воздержаться от комментариев по темам, о которых вы ничего не знаете. – BalusC

ответ

3

Как сказано в этом сообщении http://rickyrosario.com/blog/javascript-startswith-and-endswith-implementation-for-strings/

var str = "To be, or not to be, that is the question."; 
function strEndsWith(str, suffix) { 
    return str.match(suffix+"$")==suffix; 
} 
alert(strEndsWith(str,"question.")); 

это возвращает истину, если она заканчивается при условии суффикса.

JSFIDDLE

EDIT

Существует аналогичный вопрос, который задают, прежде чем проверить это here

ответ говорит

var str = "To be, or not to be, that is the question$"; 
String.prototype.endsWith = function(suffix) { 
    return this.indexOf(suffix, this.length - suffix.length) !== -1; 
}; 
alert(str.endsWith("$")); 
+0

Проверьте свое решение с суффиксом «$». Он будет рассматриваться как регулярное выражение, поэтому даже строка '' Быть или не быть, то есть вопрос. '' Будет соответствовать. – SheetJS

+0

Это действительно сработало :) Спасибо, GUYS заранее. – nudastack

+0

зависит от цели использования, иначе вы можете добавить чек на '$' –

3

ES5 не имеет endsWith функция (или, если на то пошло, startsWith). Вы можете свернуть свой собственный, как эта версия от MDN:

if (!String.prototype.endsWith) { 
    Object.defineProperty(String.prototype, 'endsWith', { 
     enumerable: false, 
     configurable: false, 
     writable: false, 
     value: function (searchString, position) { 
      position = position || this.length; 
      position = position - searchString.length; 
      var lastIndex = this.lastIndexOf(searchString); 
      return lastIndex !== -1 && lastIndex === position; 
     } 
    }); 
} 
+0

Странно, что они будут использовать 'lastIndexOf', а не просто подстроку. –

+0

Что делать, если игла появилась дважды в строке? Будет ли подстрока работать в этой ситуации? – Joe

+0

@ DanTao, что связано с семантикой их версии endsWith. Второй аргумент (позиция) описывается как «Поиск в этой строке, как если бы эта строка была только такой, по умолчанию используется фактическая длина этой строки, зажатая в пределах диапазона, установленного длиной этой строки». Это требует второй проверки. – SheetJS

0

Я никогда не видел endsWith функцию в JS. Вы можете сделать String.length, а затем проверить последние слова, указав вручную каждый символ, с которым вы хотите проверить.

Еще лучше было бы сделать регулярное выражение, чтобы найти последнее слово в строке, а затем использовать его (Regular expression to find last word in sentence).

Смежные вопросы