【问题标题】:How to find a file with javascript?如何使用 javascript 查找文件?
【发布时间】:2015-06-25 17:58:03
【问题描述】:

我的应用正在查看一个文件夹,然后在下拉菜单中显示其中的所有文件夹和 html 文件,并在 iframe 中显示所有 html 文件。我有一个名为“highlighted.html”的文件,我不想在下拉菜单中显示它,但如果它在当前目录中,我确实想在 iframe 中自动显示它。

这是我显示文件夹中内容的代码:

  • 第一个函数创建一个下拉框,动态加载文件夹或文件(带有 html 扩展名)。

  • 在第二个功能中:如果单击现有子文件夹,则打开该文件夹并在其中查找 html 文件以在 iframe 中打开它

    function rendSelects($currentSelectItem, strPath) {
        var currentSelectLevel = (null === $currentSelectItem ? -1 : parseInt($currentSelectItem.attr('data-selector-level'))),
        nextOneSelectorHtml =
            '<select ' +
            'class="dropdown selectpicker" ' +
            'name="dd" ' +
            'data-selector-level="' + (currentSelectLevel + 1) + '" ' +
            'data-path="' + strPath + '" ' +
            'onchange="onFsSelectChange(this)"' +
            '><option text selected> -- select an option -- </option>';
    
        $('div.selectors-container select.dropdown').each(function (i, el) {
            if (parseInt(el.getAttribute('data-selector-level')) > currentSelectLevel) {
                el.parentNode.removeChild(el);
                $(el).selectpicker('destroy');
            }
        });
    
        if (fsStructure[strPath].subfolders.length > 0) {
            for (var i = 0; i < fsStructure[strPath].subfolders.length; i++) {
                nextOneSelectorHtml +=
                    '<option ' +
                    'class="subfolder-option" ' +
                    'data-subfolder="' + fsStructure[strPath].subfolders[i] + '" >' + fsStructure[strPath].subfolders[i] +
                '</option>';
            }
        }
    
        if (fsStructure[strPath].subshtmls.length > 0) {
            for (var i = 0; i < fsStructure[strPath].subshtmls.length; i++) {
                nextOneSelectorHtml +=
                    '<option ' +
                    'class="html-page-option" ' +
                    'data-html-page-name="' + fsStructure[strPath].subshtmls[i] + '">' + fsStructure[strPath].subshtmls[i] +
                    '</option>';
            }
        }
    
        nextOneSelectorHtml += '</select>';
        $('div.selectors-container').append(nextOneSelectorHtml);
        $('div.selectors-container').trigger('dropdownadded.mh');
    }
    
    function onFsSelectChange(el) {
        var currentSelectorPath = el.getAttribute('data-path'),
            selectedOption = el.options[el.selectedIndex];
    
        if (selectedOption.classList.contains('subfolder-option')) {
            loadFolderStructure(currentSelectorPath + '/' + selectedOption.getAttribute('data-subfolder'), $(el))
        }
    
        if (selectedOption.classList.contains('html-page-option')) {
            playSwf(currentSelectorPath + '/' + selectedOption.getAttribute('data-html-page-name'));
        }    
    }
    

我在http://tdhtestserver.herobo.com/ 提供了一个工作演示。

已解决

【问题讨论】:

    标签: javascript jquery html iframe


    【解决方案1】:

    嗯。如果 highlight.html 确实存在于文件夹中,则不选择宪法。让我们显示一个带有 src=highlighted.html IIUC 的 iFrame。我还好吗?

    第一个函数创建一个下拉框,在其中动态加载带有 html 扩展名的文件夹或文件。 好的,让我们检查一下 highlight.html 是否在这里。

         function rendSelects($currentSelectItem, strPath) {
    //here : (begin of change)             
    if(strPath.indexOf("hightlighted")>=0) {
                           $("#myiFrame").attr('src', /path/to/highlighted)
                    }
    
        // enfd of change. The continue as  :
        var currentSelectLevel = (null === $currentSelectItem ? -1 : parseInt($currentSelectItem.attr('data-selector-level'))),
            nextOneSelectorHtml =....
    

    【讨论】:

    • 不能说$("#myiFrame").attr('src', /path/to/highlighted),因为路径是动态创建的fsStructure[strPath].subshtmls[i]
    • @MarkusHayner:没有问题。稍后再说 $("#myiFrame").attr('src', /path/to/highlighted)。实际上,问题在于:1. $(myframeid).attr(src...) 和 2. 请看我的另一个答案
    【解决方案2】:

    实际上,问题在于:1. $(myframeid).attr(src...) AND 2. $('div.selectors-container').append(nextOneSelectorHtml); /// 您必须“渲染” 1 或 2,具体取决于是否突出显示。

    function rendSelects($currentSelectItem, strPath) {
    //1of3 // let's add a boolean
    var is_highlighted_here = false;
    var highlighted_path="";
    //done.
    
        var currentSelectLevel = (null === $currentSelectItem ? -1 : parseInt($currentSelectItem.attr('data-selector-level'))),
        nextOneSelectorHtml =
            '<select ' +
            'class="dropdown selectpicker" ' +
            'name="dd" ' +
            'data-selector-level="' + (currentSelectLevel + 1) + '" ' +
            'data-path="' + strPath + '" ' +
            'onchange="onFsSelectChange(this)"' +
            '><option text selected> -- select an option -- </option>';
    
        $('div.selectors-container select.dropdown').each(function (i, el) {
            if (parseInt(el.getAttribute('data-selector-level')) > currentSelectLevel) {
                el.parentNode.removeChild(el);
                $(el).selectpicker('destroy');
            }
        });
    
        if (fsStructure[strPath].subfolders.length > 0) {
            for (var i = 0; i < fsStructure[strPath].subfolders.length; i++) {
                nextOneSelectorHtml +=
                    '<option ' +
                    'class="subfolder-option" ' +
                    'data-subfolder="' + fsStructure[strPath].subfolders[i] + '" >' + fsStructure[strPath].subfolders[i] +
                '</option>';
            }
        }
    
        if (fsStructure[strPath].subshtmls.length > 0) {
            for (var i = 0; i < fsStructure[strPath].subshtmls.length; i++) {
    
    // 2of3 // oh !! look at here :
    if( fsStructure[strPath].subshtmls[i].indexOf("highlighted")>=0 )
    {
    s_highlighted_here=true;
    highlighted_path = fsStructure[strPath].subshtmls[i];
    }
    //done. scroll to bottom.
    
    
                nextOneSelectorHtml +=
                    '<option ' +
                    'class="html-page-option" ' +
                    'data-html-page-name="' + fsStructure[strPath].subshtmls[i] + '">' + fsStructure[strPath].subshtmls[i] +
                    '</option>';
            }
        }
    
        nextOneSelectorHtml += '</select>';
    // 3of3 // here finally
      if(is_highlighted_here) {
                           $("#myiFrame").attr('src', highlighted_path);
      }
      else {
        $('div.selectors-container').append(nextOneSelectorHtml);
        $('div.selectors-container').trigger('dropdownadded.mh');
      }
    
    }//function end
    

    好吧,如果我只显示更改: - 在函数开始时:

     //1of3 
        var is_highlighted_here = false;
        var highlighted_path="";
    
    • 解析文件夹结构时:

      // 2of3 // oh !! look at here : if( fsStructure[strPath].subshtmls[i].indexOf("highlighted")>=0 ) { s_highlighted_here=true; highlighted_path = fsStructure[strPath].subshtmls[i]; }

    • 最后,渲染时:

      // 3of3 if(is_highlighted_here) { $("#myiFrame").attr('src', highlighted_path); } else { $('div.selectors-container').append(nextOneSelectorHtml); $('div.selectors-container').trigger('dropdownadded.mh'); }

    【讨论】:

    • 这和之前做的一模一样,没有任何变化。您只需调用相同的文件。我需要调用一个指定的文件。
    • 好的,提供完整源代码@MarkusHayner 的链接。好的,可以帮助你,不过时间不多。提供来源。注意:您的 iFrame 可能需要刷新。
    【解决方案3】:

    我回答我的问题是因为你们中的一些人不理解我的问题,或者他们不知道该怎么做。所以我发现这很简单,我所做的只是一行代码。

    high( currentSelectorPath + '/'+selectedOption.getAttribute('data-subfolder')+'/highlighted.html');
    

    这一行改变了一切,high 是一个新的 iframe

    function onFsSelectChange( el ) {
      var 
        currentSelectorPath = el.getAttribute('data-path'),
        selectedOption = el.options[el.selectedIndex];
    
      if ( selectedOption.classList.contains('subfolder-option') ) {
        loadFolderStructure( currentSelectorPath + '/' + selectedOption.getAttribute('data-subfolder'), $(el) )
        high( currentSelectorPath + '/'+selectedOption.getAttribute('data-subfolder')+'/highlighted.html');
      } 
      if ( selectedOption.classList.contains('html-page-option') ) {
        playSwf( currentSelectorPath + '/' +  selectedOption.getAttribute('data-html-page-name') );
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多