Ответ 1
Используйте Array.join
var s = "";
n.each(function() {
s += $(this).val() + ",";
});
становится:
var a = [];
n.each(function() {
a.push($(this).val());
});
var s = a.join(', ');
Этот код генерирует строку с разделителями-запятыми, чтобы предоставить список идентификаторов в строке запроса другой страницы, но в конце строки есть дополнительная запятая. Как я могу удалить или избежать этой дополнительной запятой?
<script type="text/javascript">
$(document).ready(function() {
$('td.title_listing :checkbox').change(function() {
$('#cbSelectAll').attr('checked', false);
});
});
function CotactSelected() {
var n = $("td.title_listing input:checked");
alert(n.length);
var s = "";
n.each(function() {
s += $(this).val() + ",";
});
window.location = "/D_ContactSeller.aspx?property=" + s;
alert(s);
}
</script>
Используйте Array.join
var s = "";
n.each(function() {
s += $(this).val() + ",";
});
становится:
var a = [];
n.each(function() {
a.push($(this).val());
});
var s = a.join(', ');
s = s.substring(0, s.length - 1);
Вы можете использовать метод String.prototype.slice
с отрицательным аргументом endSlice
:
n = n.slice(0, -1); // last char removed, "abc".slice(0, -1) == "ab"
Или вы можете использовать метод $.map
для создания строки, разделенной запятыми:
var s = n.map(function(){
return $(this).val();
}).get().join();
alert(s);
Вместо того, чтобы удалять его, вы можете просто пропустить его добавление в первую очередь:
var s = '';
n.each(function() {
s += (s.length > 0 ? ',' : '') + $(this).val();
});
Использование substring
var strNumber = "3623,3635,";
document.write(strNumber.substring(0, strNumber.length - 1));
Использование "нормального" javascript:
var truncated = s.substring(0, s.length - 1);
Более примитивным способом является изменение цикла each
в цикле for
for(var x = 0; x < n.length; x++ ) {
if(x < n.length - 1)
s += $(n[x]).val() + ",";
else
s += $(n[x]).val();
}
Сэм ответ лучше всего, но я думаю, map был бы лучшим выбором, чем each в этом случае. Вы преобразовываете список элементов в список своих значений и что именно такая вещь map
предназначена для.
var list = $("td.title_listing input:checked")
.map(function() { return $(this).val(); })
.get().join(', ');
Edit: Упс, я пропустил, что CMS избили меня до использования map
, он просто скрыл его под предложением slice
, которое я пропустил.
вы можете использовать метод расширения ниже:
String.prototype.trimEnd = function (c) {
c = c ? c : ' ';
var i = this.length - 1;
for (; i >= 0 && this.charAt(i) == c; i--);
return this.substring(0, i + 1);
}
Чтобы вы могли использовать его, например:
var str="hello,";
str.trimEnd(',');
Вывод: привет.
для дополнительных методов расширения, проверьте ссылку ниже: Методы поддержки Javascript
s = s.TrimEnd(",".ToCharArray());
Напишите функцию javascript:
var removeLastChar = function(value, char){
var lastChar = value.slice(-1);
if(lastChar == char) {
value = value.slice(0, -1);
}
return value;
}
Используйте его следующим образом:
var nums = '1,2,3,4,5,6,';
var result = removeLastChar(nums, ',');
console.log(result);