关于javascript:未捕获TypeError:text.select不是函数

Uncaught TypeError: text.select is not a function

我正在尝试使用javascript实现复制到剪贴板的功能,这意味着当用户单击复制按钮时,可以复制文本区域中的文本。这是脚本中用于执行此功能的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var item = document.getElementsByClassName('js-copyBtn');

for(var i=0; i < item.length; i++){
    item[i].addEventListener('click', function(event){

        var text = document.getElementsByClassName('js-text');
        text.select();

        try{
            var successful = document.execCommand('copy');
            var msg = successful ? 'successful' : 'unsuccessful';    
            console.log('Copy was ' + msg);  
       } catch(err) {  
         console.log('Oops, unable to copy');  
       }  
    });
}

但是,当我运行这个程序时,我在Google Chrome控制台上收到一个错误,说uncaught typeerror:text.select不是一个函数。我也在其他浏览器上测试过,但得到了相同的结果。还有人遇到这个问题吗?


getElementsByClassName返回找到的元素的HTMLCollection而不是单个元素。htmlcollection确实没有select函数。

您可能需要集合中的第一个元素

1
2
var text = document.getElementsByClassName('js-text');
text[0].select();


今天我遇到了这个问题,当有标记的答案对我不起作用时,我和你一样感到沮丧。经过一些额外的思考,我意识到我的问题是试图粘贴到段元素

中。当我把它改成文本区时,它工作得很好。所以您对数组的访问确实有问题,但是当您最终到达特定的元素时,您应该确保它是一个可编辑的元素。

祝你好运!


GetElementByClassName返回元素数组所以,您必须使用文本[0].select();


.select()方法确实从字段中检索文本。但是,您尝试在元素数组var text = document.getElementsByClassName('js-text');上运行它。此方法返回具有该类名的所有元素的数组。

如果只有一个这样的元素,则可以使用数组索引器来检索第一个元素。var text = document.getElementsByClassName('js-text')[0];

或者,如果只有一个这样的元素,您可以考虑给这个元素一个id,并使用document.getElementById(),它只返回一个元素。(ID在页面上应该是唯一的)