TypeError getElementsByTagName不是函数问题

时间:2014-11-10 16:28:48

标签: javascript jquery

我无法找到此问题的根源。基本上我在控制台中收到的错误信息是:

TypeError: $(...).getElementsByTagName is not a function

当我点击它出现的那一行时,就在这里:

var inputs = $('directoryresults').getElementsByTagName('input');

我不确定为什么会这样,因为我在页面标题中包含了jQuery

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js"></script>

有没有人有任何想法可能导致这个?

4 个答案:

答案 0 :(得分:9)

  

有没有人有任何想法可能导致这个?

jQuery构造函数返回的对象没有.getElementsByTagName()方法。


$('selector')返回一个jQuery对象。 .getElementsByTagName()是DOM元素的原生JavaScript方法。

使用您当前拥有的jQuery对象查找具有特定标记名的元素:

var inputs = $('directoryresults input');
// OR
var inputs = $('directoryresults').find('input');

要获得.getElementsByTagName()将返回的类似节点列表(请注意,这不完全相同,这将返回一个数组,其中.getElementsByTagName()将返回HTMLCollection ):

var inputs = $('directoryresults input').get();

注意:我假设directoryresults是DOM元素的类或id。无论哪种方式,您都希望修改上面的选择器

答案 1 :(得分:4)

您正在使用混合了jQuery API语法的DOM API:

&#39; document.getElementsByTagName('input');

答案 2 :(得分:3)

getElementsByTagName是您将在Element和Document对象上找到的方法。

$('directoryresults')将返回一个jQuery对象(包含任何<directoryresult>个元素......如果您正在处理HTML文档,那么没有任何内容。)

要使用getElementsByTagName,您需要从jQuery对象中提取元素:

$('directoryresults')[0].getElementsByTagName

上面只会从jQuery对象中获取第一个元素(并假设至少有一个元素),因此您应该用[0]循环替换硬编码的for

也就是说,您通常应该使用find方法:

$('directoryresults').find('input')

......或者首先使用后代组合器:

$('directoryresults input')

如前所述,directoryresults在有效的HTML文档中找不到任何内容。您可能希望使用.#作为前缀,具体取决于您实际要匹配的内容。

答案 3 :(得分:0)

如果directoryresults是类或ID,则第一个错误不具体

您也不知道目标物品或您想要呼叫的物品


如果您使用TagName的jQuery,请输入:

var inputs = $('input');

如果你想把值放在div

$.each(inputs, function(){
    $('div').append( $(this).val() );
});