将一串数字截断为一定长度

时间:2009-08-25 23:57:29

标签: jquery

我有下面的jquery代码返回一个ID列表,如1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9等等,对于我在页面上的每个List项目,我也有一个名为topfriendNumber的下拉选择框。我需要从topfriendNumber下拉框中获取值,并确保我的ID列表不超过它。

因此,如果选择下拉列表为4,那么它应该只允许4个数字1 | 2 | 3 | 4

基于此代码,您可以提供帮助吗?

这可能会添加到已经使用下拉框中的数字的底部

<select name="topfriendNumber" id="topfriendNumber">
    <option value="3">3</option>
    <option value="6" selected="selected">6</option>
    <option value="9">9</option>
    <option value="12">12</option>
</select>

function saveOrder() {
    var serialStr = "";
    $("#topfriends li").each(function (i, elm) {
        serialStr += (i > 0 ? "|" : "") + $(elm).attr("friendID");
    });
    // alert(serialStr);   //1|2|3|4|5|6|7|8|9
    $('select[name=topfriendNumber]').change();
    $.ajax({
        url: "exampe.php/SaveListOrder",
        data: '{"ids":"' + serialStr + '"}',
        dataType: "json",
        type: "POST",
        contentType: "application/json; charset=utf-8"
    });
};


//changes the background colors depending on the amount selected from the dropdown list
$('select[name=topfriendNumber]').change(function() {
    var val = $(this).val();
    //reset style
    $('ul#topfriends > li').css("background-color", "");
    //apply to all LIs before value of select
    $('ul#topfriends > li:lt(' + val + ')').css("background-color", "red");
}).change();

3 个答案:

答案 0 :(得分:3)

为什么不做到这一点,甚至不能生成超出你需要的列表?

var needed = $('select[name=topfriendNumber]').val();
$("#topfriends li").each(function (i, elm) {
    serialStr += (i > 0 ? "|" : "") + $(elm).attr("friendID");
    if (i > needed) {
        return false;
    }
});

答案 1 :(得分:1)

我建议先使用数组存储订单:

function saveOrder() {
    var serials = []; // create an empty array
    $("#topfriends li").each(function (i, elm) {
        serials.push( $(elm).attr("friendID") ); // add Friend ID
    });

    // quick way to get your old format string
    // alert(serials.join("|"));   //returns: 1|2|3|4|5|6|7|8|9

    // assuming this is where that "number" is. 
    var $numberSelect = $('select[name=topfriendNumber]');

    var numOfFriends = parseInt($numberSelect.val(),10); // get the value
    if (serials.length<numOfFriends) numOfFriends = serials.length;

    // get an array from 0, numofFriends in length.
    var serialStr = serials.slice(0, numOfFriends).join("|");
    // 1|2|3|4 if numOfFriends is 4.

    // ....
};

如果你是从字符串开始:

 function getListItems(listStr, length) {
   var parts = listStr.split("|"); // split the string up into an array.
   if (!length || (parts.length<length)) return parts.join("|");
   return parts.splice(0,length).join("|");
 }

 alert(getListItems("1|2|3|4|5|6|7|8|9", 4)); // 1|2|3|4

VoteyDisciple的答案提出了一个很好的观点 - 你真的不需要所有的朋友ID。

function saveOrder() {
    // assuming this is where that "number" is. 
    var $numberSelect = $('select[name=topfriendNumber]');
    var numOfFriends = parseInt($numberSelect.val(),10); // get the value

    var serials = []; // create an empty array
    $("#topfriends li").slice(0,numOfFriends).each(function (i, elm) {
        serials.push( $(elm).attr("friendID") ); // add Friend ID
    });

    var serialStr = serials.join("|");
    //....
 }

答案 2 :(得分:0)

var newSerialStr = serialStr.split('|').splice(0,topfriendNumber).join('|');