Стиль создает один экземпляр Image
, вы не можете использовать его в двух местах, подобных этому. Вы можете создать изображение в качестве отдельного ресурса с помощью x:Shared
= false
и указать его в стиле, а затем создать новый стиль в каждом месте, в котором используется стиль.
, например
UPDATE (Nov 24th, 2015):
Этот ответ был первоначально опубликован в 2010 году (шесть лет назад.), поэтому, пожалуйста, обратите внимание на эти проницательные комментарии:
Shauna - Update for Googlers - Похоже, ECMA6 добавляет эту функцию. Статья в MDN также показывает полифилл. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
T.J. Crowder - Создание подстрок не является дорогостоящим в современных браузерах; вполне возможно, что так было в 2010 году, когда был опубликован этот ответ. В наши дни простой подход this.substr(-suffix.length) === suffix
быстрее всего в Chrome, так же быстро в IE11, как indexOf, и только на 4% медленнее (территория fergetaboutit) в Firefox: jsperf.com/endswith-stackoverflow/14 И быстрее во всех случаях, когда результат ложный: jsperf.com/endswith-stackoverflow-when-false Конечно, с ES6, добавляющим endsWith, вопрос спорный. :-)
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Я знаю, что это вопрос годичной давности... но мне это тоже нужно, и мне нужно, чтобы это работало кроссбраузерно, так что... объединив все ответы и комментарии и немного упростив:
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
indexOf
для быстрого результатаindexOf
для пропуска впередТакже, если вам не нравится запихивать вещи в прототипы родной структуры данных, вот отдельная версия:
function endsWith(str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
}
EDIT: Как заметил @hamish в комментариях, если вы хотите подстраховаться и проверить, была ли уже предоставлена реализация, вы можете просто добавить проверку typeof
, как например:
if (typeof String.prototype.endsWith !== 'function') {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
}
if( ("mystring#").substr(-1,1) == '#' )
- Или -
if( ("mystring#").match(/#$/) )
if( "mystring#".substr(-1) === "#" ) {}
все они - очень полезные примеры. Добавление String.prototype.endsWith = function(str)
поможет нам просто назвать метод, чтобы проверить, сделают ли наши строковые концы с ним или нет, хорошо regexp также это.
я нашел лучшее решение, чем мой. Спасибо все.
Эта версия старается не создавать подстроку и не использует регулярные выражения (здесь будут работать некоторые ответы regex; другие повреждаются):
String.prototype.endsWith = function(str)
{
var lastIndex = this.lastIndexOf(str);
return (lastIndex !== -1) && (lastIndex + str.length === this.length);
}
, Если бы производительность важна для Вас, это стоило бы протестировать, быстрее ли lastIndexOf
на самом деле, чем создание подстроки или нет. (Это может зависеть от механизма JS, который Вы используете...), Это может быть быстрее в случае соответствия, и когда строка является маленькой - но когда строка огромна, это должно оглянуться назад через все это даже при том, что мы действительно не заботимся: (
Для проверки отдельного символа, нахождение длины и затем использование charAt
являются, вероятно, лучшим способом.
return this.lastIndexOf(str) + str.length == this.length;
не работает в случае, где длина исходной строки является той меньше, чем длина строки поиска и строка поиска не найдены:
lastIndexOf возвращается-1, тогда Вы добавляете длину строки поиска, и Вас оставляют с длиной исходной строки.
А возможная фиксация
return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length
/#$/.test(str)
будет работать над всеми браузерами, не требует исправления обезьяны String
, и не требует сканирования всей строки как lastIndexOf
делает, когда там не идет ни в какое сравнение.
Если Вы хотите соответствовать постоянной строке, которая могла бы содержать специальные символы регулярного выражения, такой как '$'
, затем можно использовать следующее:
function makeSuffixRegExp(suffix, caseInsensitive) {
return new RegExp(
String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$",
caseInsensitive ? "i" : "");
}
и затем можно использовать его как это
makeSuffixRegExp("a[complicated]*suffix*").test(str)
Come on, this is the correct endsWith
implementation:
String.prototype.endsWith = function (s) {
return this.length >= s.length && this.substr(this.length - s.length) == s;
}
using lastIndexOf
just creates unnecessary CPU loops if there is no match.
function check(str)
{
var lastIndex = str.lastIndexOf('/');
return (lastIndex != -1) && (lastIndex == (str.length - 1));
}