The script does not work when adding a class using jQuery addClass

I found a script which detects the file type in jQuery:

$(function(){
    jQuery.fn.LiFileType = function(options){
    var options = jQuery.extend({
        //gh: 25 //Высота пунктов меню
    },options);
    return this.each(function(index) {
        var loadFile = $(this);
        var file = loadFile.attr('href')
        var reWin = /.*(.*)/;
        var fileTitle = file.replace(reWin, "

I found a script which detects the file type in jQuery:

$(function(){
    jQuery.fn.LiFileType = function(options){
    var options = jQuery.extend({
        //gh: 25 //Высота пунктов меню
    },options);
    return this.each(function(index) {
        var loadFile = $(this);
        var file = loadFile.attr('href')
        var reWin = /.*\(.*)/;
        var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для w*s
        reUnix = /.*/(.*)/;
        var fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название для *nix
        var RegExExt =/.*.(.*)/;
        var extPre = fileTitle.replace(RegExExt, "$1");//и его расширение
        ext = extPre.substr(0,3)
        var pos;
        if (ext){
            switch (ext.toLowerCase())
            {
                case 'doc': pos = '(DOC)'; break;
				case 'bmp': pos = '(BMP)'; break;                       
				case 'jpg': pos = '(JPG)'; break;
				case 'jpeg': pos = '(JPEG)'; break;
				case 'mp3': pos = '(MP3)'; break;
				case 'avi': pos = '(AVI)'; break;
				case 'wmv': pos = '(WMV)'; break;
				case 'flv': pos = '(FLV)'; break;
				case 'pdf': pos = '(PDF)'; break;
				case 'txt': pos = '(TXT)'; break;
				case 'xls': pos = '(XLS)'; break;
				case 'rar': pos = '(RAR)'; break;
				case 'zip': pos = '(ZIP)'; break;
				default   : pos = ''  ; break;
            };
            // Создаем специальный класс для нового класса
		      var cssRuleClass = 'filIcon_' + index;
		      $(this).addClass(cssRuleClass);
		      var cssRule = '.' + cssRuleClass + ':after{ content:" '+pos+'";}';
		      $('<style>').text(cssRule).appendTo('head');
        };
    });
};
    $(".filetype").LiFileType();
    
    //layout js
    $('.filetype').click(function(){return false;});
})
.fileIcon:after {

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<a href="file.doc" class="filetype" >file.doc</a>
<a href="file.bmp" >file.bmp</a>
<a href="file.jpg">file.jpg</a>
<a href="file.jpeg">file.jpeg</a>
<a href="file.png">file.png</a>
<a href="file.gif">file.gif</a>
<a href="file.psd">file.psd</a>
<a href="file.mp3">file.mp3</a>
<a href="file.wav">file.wav</a>
<a href="file.ogg">file.ogg</a>
<a href="file.avi">file.avi</a>
<a href="file.wmv">file.wmv</a>
<a href="file.flv">file.flv</a>
<a href="file.pdf">file.pdf</a>
<a href="file.exe">file.exe</a>
<a href="file.txt">file.txt</a>
<a href="file.xls">file.xls</a>
<a href="file.rar">file.rar</a>
<a href="file.zip">file.zip</a>

Everything works fine only when I class filetype write with hands for links... but when I add $('a').addClass('filetype'); gives me error of jquery.LiFileType.js:10 Uncaught TypeError: Cannot read property 'replace' of undefined

what could be the problem? already 2 days looking for a solution 🙁

UPD
Maybe try this effect with span?
For Example add the array and display him wrap over the tag a:

var fileIcon = $( "a" ).wrap( "<span class='another'></div>" );

and to add a pseudo-class after?

"); //выдираем название файла для w*s
reUnix = /.*/(.*)/;
var fileTitle = fileTitle.replace(reUnix, "

I found a script which detects the file type in jQuery:

$(function(){
    jQuery.fn.LiFileType = function(options){
    var options = jQuery.extend({
        //gh: 25 //Высота пунктов меню
    },options);
    return this.each(function(index) {
        var loadFile = $(this);
        var file = loadFile.attr('href')
        var reWin = /.*\(.*)/;
        var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для w*s
        reUnix = /.*/(.*)/;
        var fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название для *nix
        var RegExExt =/.*.(.*)/;
        var extPre = fileTitle.replace(RegExExt, "$1");//и его расширение
        ext = extPre.substr(0,3)
        var pos;
        if (ext){
            switch (ext.toLowerCase())
            {
                case 'doc': pos = '(DOC)'; break;
				case 'bmp': pos = '(BMP)'; break;                       
				case 'jpg': pos = '(JPG)'; break;
				case 'jpeg': pos = '(JPEG)'; break;
				case 'mp3': pos = '(MP3)'; break;
				case 'avi': pos = '(AVI)'; break;
				case 'wmv': pos = '(WMV)'; break;
				case 'flv': pos = '(FLV)'; break;
				case 'pdf': pos = '(PDF)'; break;
				case 'txt': pos = '(TXT)'; break;
				case 'xls': pos = '(XLS)'; break;
				case 'rar': pos = '(RAR)'; break;
				case 'zip': pos = '(ZIP)'; break;
				default   : pos = ''  ; break;
            };
            // Создаем специальный класс для нового класса
		      var cssRuleClass = 'filIcon_' + index;
		      $(this).addClass(cssRuleClass);
		      var cssRule = '.' + cssRuleClass + ':after{ content:" '+pos+'";}';
		      $('<style>').text(cssRule).appendTo('head');
        };
    });
};
    $(".filetype").LiFileType();
    
    //layout js
    $('.filetype').click(function(){return false;});
})
.fileIcon:after {

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<a href="file.doc" class="filetype" >file.doc</a>
<a href="file.bmp" >file.bmp</a>
<a href="file.jpg">file.jpg</a>
<a href="file.jpeg">file.jpeg</a>
<a href="file.png">file.png</a>
<a href="file.gif">file.gif</a>
<a href="file.psd">file.psd</a>
<a href="file.mp3">file.mp3</a>
<a href="file.wav">file.wav</a>
<a href="file.ogg">file.ogg</a>
<a href="file.avi">file.avi</a>
<a href="file.wmv">file.wmv</a>
<a href="file.flv">file.flv</a>
<a href="file.pdf">file.pdf</a>
<a href="file.exe">file.exe</a>
<a href="file.txt">file.txt</a>
<a href="file.xls">file.xls</a>
<a href="file.rar">file.rar</a>
<a href="file.zip">file.zip</a>

Everything works fine only when I class filetype write with hands for links... but when I add $('a').addClass('filetype'); gives me error of jquery.LiFileType.js:10 Uncaught TypeError: Cannot read property 'replace' of undefined

what could be the problem? already 2 days looking for a solution 🙁

UPD
Maybe try this effect with span?
For Example add the array and display him wrap over the tag a:

var fileIcon = $( "a" ).wrap( "<span class='another'></div>" );

and to add a pseudo-class after?

"); //выдираем название для *nix
var RegExExt =/.*.(.*)/;
var extPre = fileTitle.replace(RegExExt, "

I found a script which detects the file type in jQuery:

$(function(){
    jQuery.fn.LiFileType = function(options){
    var options = jQuery.extend({
        //gh: 25 //Высота пунктов меню
    },options);
    return this.each(function(index) {
        var loadFile = $(this);
        var file = loadFile.attr('href')
        var reWin = /.*\(.*)/;
        var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для w*s
        reUnix = /.*/(.*)/;
        var fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название для *nix
        var RegExExt =/.*.(.*)/;
        var extPre = fileTitle.replace(RegExExt, "$1");//и его расширение
        ext = extPre.substr(0,3)
        var pos;
        if (ext){
            switch (ext.toLowerCase())
            {
                case 'doc': pos = '(DOC)'; break;
				case 'bmp': pos = '(BMP)'; break;                       
				case 'jpg': pos = '(JPG)'; break;
				case 'jpeg': pos = '(JPEG)'; break;
				case 'mp3': pos = '(MP3)'; break;
				case 'avi': pos = '(AVI)'; break;
				case 'wmv': pos = '(WMV)'; break;
				case 'flv': pos = '(FLV)'; break;
				case 'pdf': pos = '(PDF)'; break;
				case 'txt': pos = '(TXT)'; break;
				case 'xls': pos = '(XLS)'; break;
				case 'rar': pos = '(RAR)'; break;
				case 'zip': pos = '(ZIP)'; break;
				default   : pos = ''  ; break;
            };
            // Создаем специальный класс для нового класса
		      var cssRuleClass = 'filIcon_' + index;
		      $(this).addClass(cssRuleClass);
		      var cssRule = '.' + cssRuleClass + ':after{ content:" '+pos+'";}';
		      $('<style>').text(cssRule).appendTo('head');
        };
    });
};
    $(".filetype").LiFileType();
    
    //layout js
    $('.filetype').click(function(){return false;});
})
.fileIcon:after {

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<a href="file.doc" class="filetype" >file.doc</a>
<a href="file.bmp" >file.bmp</a>
<a href="file.jpg">file.jpg</a>
<a href="file.jpeg">file.jpeg</a>
<a href="file.png">file.png</a>
<a href="file.gif">file.gif</a>
<a href="file.psd">file.psd</a>
<a href="file.mp3">file.mp3</a>
<a href="file.wav">file.wav</a>
<a href="file.ogg">file.ogg</a>
<a href="file.avi">file.avi</a>
<a href="file.wmv">file.wmv</a>
<a href="file.flv">file.flv</a>
<a href="file.pdf">file.pdf</a>
<a href="file.exe">file.exe</a>
<a href="file.txt">file.txt</a>
<a href="file.xls">file.xls</a>
<a href="file.rar">file.rar</a>
<a href="file.zip">file.zip</a>

Everything works fine only when I class filetype write with hands for links... but when I add $('a').addClass('filetype'); gives me error of jquery.LiFileType.js:10 Uncaught TypeError: Cannot read property 'replace' of undefined

what could be the problem? already 2 days looking for a solution 🙁

UPD
Maybe try this effect with span?
For Example add the array and display him wrap over the tag a:

var fileIcon = $( "a" ).wrap( "<span class='another'></div>" );

and to add a pseudo-class after?

");//и его расширение
ext = extPre.substr(0,3)
var pos;
if (ext){
switch (ext.toLowerCase())
{
case 'doc': pos = '(DOC)'; break;
case 'bmp': pos = '(BMP)'; break;
case 'jpg': pos = '(JPG)'; break;
case 'jpeg': pos = '(JPEG)'; break;
case 'mp3': pos = '(MP3)'; break;
case 'avi': pos = '(AVI)'; break;
case 'wmv': pos = '(WMV)'; break;
case 'flv': pos = '(FLV)'; break;
case 'pdf': pos = '(PDF)'; break;
case 'txt': pos = '(TXT)'; break;
case 'xls': pos = '(XLS)'; break;
case 'rar': pos = '(RAR)'; break;
case 'zip': pos = '(ZIP)'; break;
default : pos = '' ; break;
};
// Создаем специальный класс для нового класса
var cssRuleClass = 'filIcon_' + index;
$(this).addClass(cssRuleClass);
var cssRule = '.' + cssRuleClass + ':after{ content:" '+pos+'";}';
$('<style>').text(cssRule).appendTo('head');
};
});
};
$(".filetype").LiFileType();

//layout js
$('.filetype').click(function(){return false;});
})

.fileIcon:after {

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<a href="file.doc" class="filetype" >file.doc</a>
<a href="file.bmp" >file.bmp</a>
<a href="file.jpg">file.jpg</a>
<a href="file.jpeg">file.jpeg</a>
<a href="file.png">file.png</a>
<a href="file.gif">file.gif</a>
<a href="file.psd">file.psd</a>
<a href="file.mp3">file.mp3</a>
<a href="file.wav">file.wav</a>
<a href="file.ogg">file.ogg</a>
<a href="file.avi">file.avi</a>
<a href="file.wmv">file.wmv</a>
<a href="file.flv">file.flv</a>
<a href="file.pdf">file.pdf</a>
<a href="file.exe">file.exe</a>
<a href="file.txt">file.txt</a>
<a href="file.xls">file.xls</a>
<a href="file.rar">file.rar</a>
<a href="file.zip">file.zip</a>

Everything works fine only when I class filetype write with hands for links… but when I add $('a').addClass('filetype'); gives me error of jquery.LiFileType.js:10 Uncaught TypeError: Cannot read property 'replace' of undefined

what could be the problem? already 2 days looking for a solution 🙁

UPD
Maybe try this effect with span?
For Example add the array and display him wrap over the tag a:

var fileIcon = $( "a" ).wrap( "<span class='another'></div>" );

and to add a pseudo-class after?

1 ответ

  1. The Problem seems to be here:

    var fileTitle = file.replace(reWin, "
    	

    The Problem seems to be here:

    var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для w*s
    reUnix = /.*\/(.*)/;
    var fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название для *nix
    

    Remove the var before your second fileTitle and try it again

    "); //выдираем название файла для w*s
    reUnix = /.*\/(.*)/;
    var fileTitle = fileTitle.replace(reUnix, "

    The Problem seems to be here:

    var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для w*s
    reUnix = /.*\/(.*)/;
    var fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название для *nix
    

    Remove the var before your second fileTitle and try it again

    "); //выдираем название для *nix

    Remove the var before your second fileTitle and try it again