Mysql
 sql >> база данни >  >> RDS >> Mysql

JQuery Datatable - Разделяне на една клетка на множество колони за четливост?

Бих опитал да използвам регулярен израз като този:/^(https?:\/\/)(.+\/)(.+)/ .

Така че, ако приемем, че вашите данни са в JSON, формиран като в този пример .
И че имате ЕДИН JSON атрибут, съдържащ пълния URL.

Кажете... Нещо като това:

{
    "frequency":{value},
    "occurrences":{value},
    "fullurl":{value}
}

Вашата функция ще изглежда така:

$(function() {
    $('#ut-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: '{!! url('/all') !!}',
        columns: [
            { data: 'frequency'},
            { data: 'occurrences'},
            { data: 'fullurl', render: function(data, type, row){
                var regexp = /^(https?:\/\/)(.+\/)(.+)/;
                var match = regexp.exec(data);
                return match[0];                        // PROTOCOL
                }
            },
            { data: 'fullurl', render: function(data, type, row){
                var regexp = /^(https?:\/\/)(.+\/)(.+)/;
                var match = regexp.exec(data);
                return match[1];                        // DOMAIN
                }
            },
            { data: 'fullurl', render: function(data, type, row){
                var regexp = /^(https?:\/\/)(.+\/)(.+)/;
                var match = regexp.exec(data);
                return match[2];                        // PATH
                }
            },
        ],
    });
});

Така че регулярният израз има 3 възможни „съвпадения“, определени от скоби.
Нокът е да върнете правилното съвпадение в дясната колона.

Можете да тествате собствения си регулярен израз тук .

Надявам се да помогне!
;)




РЕДАКТИРАНЕ

За да "разделите" само пътя... вместо пълния URL, както беше зададено в коментарите:

По-добре използвайте .split функция тогава.
Защото тази част няма да бъде като "обикновена" в предишния случай.
Може да има различно ниво на поддиректория...
Може да има наклонена черта в края и понякога не .

Така че да кажем, че имате 4 колони, като за примера, който сте предоставили:"/this/is/my/path"

Тъй като функцията е малко по-дълга, мисля, че е най-добре да избягвате да се повтаря 4 пъти.
Така че нека създадем функция, която да поставим в глобален обхват.

// This var is the real column amount of your table (not zero-based).
var maxPathParts = 4;

function pathSplitter(pathPart){

    // Check if the first char is a / and remove if it's the case.
    // It would oddly make the first array element as empty.
    if(data.charAt(0)=="/"){
        data = data.sustr(1);
    }

    // Check if last char is a slash.
    var lastWasSlash=false;
    if(data.charAt(data.length-1)=="/"){
        lastWasSlash=true;
        data = data.substr(0,data.length-1);
    }

    // Now split the data in an array based on slashes.
    var splittedData = data.split("/");

    // If there is more parts than maxPathParts... Aggregate all the excedent in the last part.
    if(splittedData.length>maxPathParts){
        var tempLastPart;
        for(i=maxPathParts-1;i<splittedData.length;i++){
        tempLastPart += splittedData[i] + "/";
        }
        splittedData[maxPathParts]=tempLastPart;
    }

    // If it exist.
    if(typeof(splittedData[pathPart]!="undefined"){

        // Add a trailing slash to it if it is not the last element.
        if( pathPart != splittedData.length-1 ){

            // Add a trailing slash to it.
            splittedData[pathPart] += "/";
        }

        // But add it anyway if the last char of the path was a slash.
        if (pathPart != splittedData.length-1 && lastWasSlash ){

            // Add a trailing slash to it.
            splittedData[pathPart] += "/";
        }
        return splittedData[pathPart];

    }else{
        // If there is no value for this column.
        return "";
    }
}

Така че сега, когато имате функция, просто я извикайте в настройките на колоната на DataTable с номер на дясната колона като аргумент:

columns: [
    { data: 'domain'},
    { data: 'path', render: pathSplitter(0)},
    { data: 'path', render: pathSplitter(1)},
    { data: 'path', render: pathSplitter(2)},
    { data: 'path', render: pathSplitter(3)},
],

Кажете ми, че има грешки... Не съм тествал нищо.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете всичко преди/след определен символ в MySQL – SUBSTRING_INDEX()

  2. Достъпът до връзката е отказан за потребителски www-данни

  3. MONTHNAME() Примери – MySQL

  4. не можа да компилира mysql процедура за курсори

  5. Как да използвам mysql JOIN без условие ON?