jQuery .text()方法返回其他函数中的NaN

时间:2017-04-20 14:29:22

标签: javascript jquery

我正在尝试修改prestashop移动导航并且遇到了一些困难 尝试使用包含主要类别标题的新元素附加子类别列表。标题写成NaN。

代码:

$('#maincategories > li').children('a').each(function() {

        //here i remove original navigation icons so they wont get into title String.
        $(this).children('span').remove();
        var str = $(this).text().toString().replace(" ","");

        var generateSubmenuTrigger = function(action) {
            if (action == 'show') {
                var triggerClass = 'showSubnav',
                var parentTitle = "";
            } else if (action == 'hide') {
                var triggerClass = 'hideSubnav';
                var parentTitle = str;
            };
            return '<a class="msubnav '+ class +'">'+
                       +parentTitle+
                   '</a>';
        };

        $(this).parent('li').append(generateSubmenuTrigger('show'));
        $(this).parent('li').children('div').children('ul').append(generateSubmenuTrigger('hide'))
    });

我一直在使用console.log查看parentTitle字符串,直到我将其推送到generateSubmenuTrigger函数中之前一切都很好。如果有人能够解释为什么它会变成NaN以及如何修复它,那将是非常好的。

1 个答案:

答案 0 :(得分:3)

原因在于此退货声明:

a

parentTitle代码和class之间有两个优势。删除其中一个。

顺便说一下,我在任何地方都看不到class。请注意,命名变量$(this).text().toString()可能会导致意外行为,因为它是JS中的保留字。

我还会将$(this).text()替换为.toString(),因为var imageArray = []; var imagesFiles = ['home_16.png', 'home_16_done.png', 'not existing.png']; function preLoadImages(callback) { var filesCount = imagesFiles.length; for (var i = 0; i < imagesFiles.length; i++) { var imageObj = new Image(); imageObj.src = '/images/' + imagesFiles[i]; imageObj.name = imagesFiles[i]; imageObj.onload = (function (img) { imageArray.push({ name: img.target.name, object: img.target }); filesCount--; if (filesCount === 0) { if (callback) callback(imageArray); }}); imageObj.onerror = function () { //even image is not loaded filesCount--; if (filesCount === 0) { if (callback) callback(imageArray); }}; } } .... pushpin = new Microsoft.Maps.Pushpin(location, { icon: createCanvasContent(imageArray[i], parameters[]) ..... function createCanvasContent(img, parameters){ var c = document.createElement('canvas'); c.width = img.width + 2; c.height = img.height + 2; var context = c.getContext('2d'); context.fillStyle = bgrcolor; context.fillRect(0, 0, 18, 18); c.style.opacity = '0.8'; //Draw image context.drawImage(img, 1, 0, c.width - 2, c.height - 2); return c.toDataURL(); } 无用。