【问题标题】:Display function output within an anonymous function在匿名函数中显示函数输出
【发布时间】:2014-08-18 13:00:04
【问题描述】:

我正在尝试在我的 javascript 代码中输出 SELECTED TEXT。我创建了一个函数,它将获取选定的文本,我只想在输出提交按钮时输出它。

这里是获取所选 HTML 或 TEXT 的 javascript。

function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
   document.write(html);

}

这是我输出其他内容的代码以及上面的函数(但它不会只显示出来)

(function() 
{
    tinymce.PluginManager.add('my_mce_button', function( editor, url ) 
    {
        editor.addButton( 'my_mce_button', 
        {
            icon: false,
            text: 'Tooltip',
            onclick: function() 
            {
                editor.windowManager.open( 
                {
                    title: 'Tooltip Option',
                    body: 
                    [
                        {
                            type: 'textbox',
                            name: 'textboxtooltipName',
                            label: 'Tooltip Text',
                            value: ''
                        },
                        {
                            type: 'listbox',
                            name: 'listboxClassName',
                            label: 'Class',
                            'values': 
                            [
                                {text: 'Top Tooltip', value: 'top_tooltip'},
                                {text: 'Left Tooltip', value: 'left_tooltip'},
                                {text: 'Right Tooltip', value: 'right_tooltip'},
                                {text: 'Bottom Tooltip', value: 'bottom_tooltip'}
                            ]
                        }
                    ],
                    onsubmit: function( e ) 
                    {
                        editor.insertContent( '[tooltip class="' + e.data.listboxClassName + '" title="' + e.data.textboxtooltipName + '"]  html  [/tooltip]');
                    }
                });
            }
        });
    });
})();

现在这一行负责显示 SELECTED TEXT + 其他属性。基本上,我创建了一个 HTML 变量来捕获选定的文本,但它没有显示在我的代码中。查看代码:

onsubmit: function( e ) 
{
    editor.insertContent( '[tooltip class="' + e.data.listboxClassName + '" title="' + e.data.textboxtooltipName + '"]  html  [/tooltip]'); 
}

知道发生了什么吗?如何正确显示getSelectionHtml函数的输出到匿名函数的输出?

【问题讨论】:

  • “基本上,我创建了一个 HTML 变量来捕获选定的文本” - 我没有得到这部分。在哪里?你为什么使用document.write(html);?您想用所选文本替换整个文档吗?
  • 嗨 TJ 我使用 html 变量来获取窗口上的选定文本,然后将其与匿名函数上的其他属性一起输出。
  • 如果您指的是函数中的以下代码:editor.insertContent( '[tooltip class="' + e.data.listboxClassName + '" title="' + e.data.textboxtooltipName + '"] html [/tooltip]'); html 是字符串,而不是变量。即使是,你也不能在 IIFE 中访问它,除非它是全局的。
  • 你能帮我修改一下代码吗?这样我也可以检查您的意思?提前致谢!

标签: javascript jquery html variables


【解决方案1】:

您的 getSelectionHtml() 函数获取页面上选择的文本,但我认为您希望在 tinymce 编辑器中选择文本。

试试:

editor.insertContent(
    '[tooltip class="' + e.data.listboxClassName
    + '" title="' + e.data.textboxtooltipName + '"]'
    + editor.selection.getContent()
    + '[/tooltip]');

【讨论】:

    【解决方案2】:

    试试

    function getSelectionHtml() {
      html = ""; // removed var so that it can be accessed globally.
      if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
      } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
      }
     //document.write(html); this will rewrite the document - don't do this!
    }
    

    在匿名函数中:

    onsubmit: function( e ) 
    {
       getSelectionHtml(); // get selected the text
       if(html) // check whether text is selected
           editor.insertContent( '[tooltip class="' + e.data.listboxClassName + '" title="' + e.data.textboxtooltipName + '"]'+  html+'  [/tooltip]'); // html now reffers to the global variable
    }
    

    【讨论】:

    • 仍然没有得到选定/突出显示的 HTML 或 TEXT。它根本没有显示任何内容。
    • 在控制台检查错误:如果没有,将//document.write(html);替换为alert(html)console.log(html),看看函数是否真的得到文本。一一检查流量。这称为调试。除非我们有完整的代码或演示,否则我们无法为您提供帮助。以上是我看到的关于共享代码的修复。祝你好运。
    • TJ 根本没有获取 Html
    • @SamNorton 那是另一个问题。在询问Display function output within an anonymous function 之类的问题之前,您应该检查该功能是否正常工作。你的问题应该是How to get selected text usining js,这当然是重复的。检查该代码的来源并进行一些研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多