.getAttribute is not a function报错 对于getAttribute的一点小想法

墨蓝 2022-05-18 01:58 84阅读 0赞

我最近在学习SVG编程,对于SVGDOM对象内部的属性进行操作,时常需要取属性,来利用getAttribute()实现。

我在利用getAttribute()成功将数据取了出来,但是在网页的console台却报错了。

js代码如下所示:

  1. //获取要取到的XML文件中的所有数据
  2. var SVGElement = document.getElementById('geo_svg');
  3. //从SVG的XML中,把所有的polygon多边形取出来
  4. var polygonElements = SVGElement.getElementsByTagName('polygon');
  5. //取出每个ploygen数组中的数据
  6. for(var x in polygonElements){
  7. //打印每个polygon的points属性
  8. console.log(polygonElements[x].getAttribute("points"));

运行后,在console台的打印信息如下所示:

70

可以看到上面成功取出点集坐标来了,在下面,却报错

  1. Uncaught TypeError: polygonElements[x].getAttribute is not a function
  2. at findCoordinate (init?projTbmId=1&tabPageId=jerichotabiframe_1:1596)
  3. at Object.success (init?projTbmId=1&tabPageId=jerichotabiframe_1:1573)
  4. at l (jquery-1.8.3.min.js:2)
  5. at Object.fireWith [as resolveWith] (jquery-1.8.3.min.js:2)
  6. at T (jquery-1.8.3.min.js:2)
  7. at XMLHttpRequest.r (jquery-1.8.3.min.js:2)

我想了很久也没想明白,为什么取出数据来,还报错。看了网上的debug也没有帮助。

后来我打印了一下所查数据的类型:

  1. console.log(typeof(polygonElements[x]));

最后发现这个查询对象,有三种数据类型,一个是number,一个是Object,一个是function。

然后我就加了一个判断是否为对象,若是对象,则getAttribute()可用,否则不可用。

  1. if(typeof(polygonElements[x])=="object")

加入这条语句后,自动过滤非对象数据类型。完美解决bug

对于这种取属性的函数,需要经常进行判断是否是对象。增强代码的鲁棒性,这一点很重要。

打完收工!

发表评论

表情:
评论列表 (有 0 条评论,84人围观)

还没有评论,来说两句吧...

相关阅读