2010-01-12 79 views
26

Mã này tạo ra một chuỗi phân cách bằng dấu phẩy để cung cấp danh sách các id vào chuỗi truy vấn của một trang khác, nhưng có một dấu phẩy phụ ở cuối chuỗi. Làm thế nào tôi có thể loại bỏ hoặc tránh thêm dấu phẩy?Làm thế nào để loại bỏ dấu phẩy cuối cùng?

<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> 

Trả lời

82

Sử dụng Array.join

var s = ""; 
n.each(function() { 
    s += $(this).val() + ","; 
}); 

trở thành:

var a = []; 
n.each(function() { 
    a.push($(this).val()); 
}); 
var s = a.join(', '); 
+7

+1 ... cách tốt hơn tất cả các chuỗi này dò dẫm. – Filburt

+0

@Filburt Tôi không nghĩ giải pháp tốt nhất của nó vì thời gian xử lý sẽ nhiều hơn so với trước đây. –

+0

@NikhilAgrawal Bạn nên cung cấp một số kết quả kiểm tra để chứng minh điều đó. – Filburt

23
s = s.substring(0, s.length - 1); 
+0

Đơn giản là tốt nhất :-) –

+5

Không nó là ** không ** các * tốt nhất * bởi vì nó không xác nhận rằng các char cuối cùng trong chuỗi thực sự * là * một 'dấu phẩy '. – Abela

2

Sử dụng 'bình thường' javascript:

var truncated = s.substring(0, s.length - 1); 
11

Bạn có thể sử dụng phương pháp String.prototype.slice với một endSlice luận tiêu cực:

n = n.slice(0, -1); // last char removed, "abc".slice(0, -1) == "ab" 

Hoặc bạn có thể sử dụng phương pháp $.map để tạo chuỗi được phân cách bằng dấu phẩy:

var s = n.map(function(){ 
    return $(this).val(); 
}).get().join(); 

alert(s); 
+0

Ah, đánh bại tôi với nó –

5

Thay vì loại bỏ nó, bạn có thể chỉ đơn giản là bỏ qua bước thêm nó ở nơi đầu tiên:

var s = ''; 
n.each(function() { 
    s += (s.length > 0 ? ',' : '') + $(this).val(); 
}); 
+2

Tôi phải nói đây là một mẹo nhỏ gọn! +1 –

+0

Cách cố gắng giải quyết tốt hơn nhưng không hiệu quả chút nào. – Sanju

+0

@Sanju: Điều gì xảy ra khi bạn cố gắng sử dụng? Bạn có nhận được thông báo lỗi nào không? – Guffa

2

Một nguyên thủy hơn cách là thay đổi vòng lặp each thành for loop

for(var x = 0; x < n.length; x++) { 
    if(x < n.length - 1) 
    s += $(n[x]).val() + ","; 
    else 
    s += $(n[x]).val(); 
} 
+0

Tại sao? Nếu bạn cần truy cập vào chỉ mục của mục hiện tại, '.each()' không cung cấp chỉ mục đó. – nnnnnn

1

câu trả lời của Sam là tốt nhất cho đến nay, nhưng tôi nghĩ map sẽ là một lựa chọn tốt hơn so với each trong trường hợp này. Bạn đang chuyển đổi một danh sách các phần tử thành một danh sách các giá trị của chúng, và đó chính là loại điều map được thiết kế cho.

var list = $("td.title_listing input:checked") 
    .map(function() { return $(this).val(); }) 
    .get().join(', '); 

Chỉnh sửa: Rất tiếc, tôi bị mất rằng CMS đánh tôi đến việc sử dụng map, ông chỉ giấu nó dưới một gợi ý slice mà tôi bỏ qua.

-1
s = s.TrimEnd(",".ToCharArray()); 
+1

Đó không phải là Javascript ... – nnnnnn

-1

Viết một hàm javascript:

var removeLastChar = function(value, char){ 
    var lastChar = value.slice(-1); 
    if(lastChar == char) { 
     value = value.slice(0, -1); 
    } 
    return value; 
} 

Sử dụng nó như thế này:

var nums = '1,2,3,4,5,6,'; 
var result = removeLastChar(nums, ','); 
console.log(result); 

jsfiddle demo

+0

đó không phải là mã tốt. nếu tôi viết dấu phẩy ở giữa các giá trị thì sao? –

0

bạn có thể sử dụng dưới phương pháp khuyến nông:

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); 
} 

Vì vậy mà bạn có thể sử dụng nó như:

var str="hello,"; 
str.trimEnd(','); 

Output: chào.

cho các phương pháp mở rộng hơn, kiểm tra dưới đây liên kết: Javascript helper methods

5

Sử dụng substring

var strNumber = "3623,3635,"; 
 

 
document.write(strNumber.substring(0, strNumber.length - 1));

Sử dụng slice

document.write("3623,3635,".slice(0, -1));

Sử dụng map

var strNumber = "3623,3635,"; 
 

 
var arrData = strNumber.split(','); 
 

 
document.write($.map(arrData, function(value, i) { 
 
    return value != "" ? value : null; 
 
}).join(','));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Sử dụng Array.join

var strNumber = "3623,3635,"; 
 
var arrTemp = strNumber.split(','); 
 
var arrData = []; 
 

 
$.each(arrTemp, function(key, value) { 
 
    //document.writeln(value); 
 
    if (value != "") 
 
    arrData.push(value); 
 
}); 
 

 
document.write(arrData.join(', '));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Các vấn đề liên quan