Javascript 如何在同一页面上使用jquery和d3?
仅使用d3,我就可以使用以下js将idAttr var值设置为“myId”:Javascript 如何在同一页面上使用jquery和d3?,javascript,jquery,d3.js,Javascript,Jquery,D3.js,仅使用d3,我就可以使用以下js将idAttr var值设置为“myId”: var idAttr = d3.select(document.getElementById('imgMap').contentDocument).select('#myId').attr('id'); 但是,如果我将jquery src添加到页面中,并将上面的行包含在document.ready()处理程序中,那么jquery会引发以下异常: jQuery.Deferred exception: Cannot re
var idAttr = d3.select(document.getElementById('imgMap').contentDocument).select('#myId').attr('id');
但是,如果我将jquery src添加到页面中,并将上面的行包含在document.ready()处理程序中,那么jquery会引发以下异常:
jQuery.Deferred exception: Cannot read property 'getAttribute' of null TypeError: Cannot read property 'getAttribute' of null
at zi.K_ [as attr] (https://d3js.org/d3.v4.min.js:6:24649)
at HTMLDocument.<anonymous> (http://localhost:8080/svg-tester-2.html:18:100)
at j (https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js:2:29588)
at k (https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js:2:29902) undefined
jQuery.Deferred异常:无法读取null类型的属性“getAttribute”错误:无法读取null类型的属性“getAttribute”
在zi.K_[as attr](https://d3js.org/d3.v4.min.js:6:24649)
在HTMLDocument。(http://localhost:8080/svg-tester-2.html:18:100)
在j(https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js:2:29588)
在k(https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js:2:29902)未定义
我猜jQuery试图覆盖d3对attr()函数的实现。我需要将我的逻辑放入document.ready()函数中。我相信其他人也遇到过这种行为/挑战。在同一页面上使用d3和jquery有什么好的解决方案?您可以使用未统一的d3版本()并显示错误发生在哪一行吗?我认为问题在于d3和jquery在attr()函数上存在冲突。d3有自己的attr()函数,它试图以特定的方式使用该函数。但是,jQuery有自己的attr()函数,该函数覆盖导致错误的d3实现。我是否需要使用jQuery noconflict()实现?此表达式
document.getElementById('imgMap').contentDocument
由浏览器计算,然后传递给d3。错误与d3无关,document
在这一点上就是null
。您使用的是iFrame吗?你有什么理由不能这么做:d3.select(“#myId”).attr(…)我不明白为什么会出现jQuery.Deferred异常。基于您的代码,我不希望涉及任何延迟对象d3.select(…).select(“#myId”)
应该选择一个d3对象,而不是jQuery对象,因此attr
函数将是d3的。您可以使用未统一的d3版本()并显示错误发生在哪一行吗?我认为问题是d3和jQuery之间在attr()函数上存在冲突。d3有自己的attr()函数,它试图以特定的方式使用该函数。但是,jQuery有自己的attr()函数,该函数覆盖导致错误的d3实现。我是否需要使用jQuery noconflict()实现?此表达式document.getElementById('imgMap').contentDocument
由浏览器计算,然后传递给d3。错误与d3无关,document
在这一点上就是null
。您使用的是iFrame吗?你有什么理由不能这么做:d3.select(“#myId”).attr(…)我不明白为什么会出现jQuery.Deferred异常。基于您的代码,我不希望涉及任何延迟对象d3.select(…).select(“#myId”)
应该选择d3对象,而不是jQuery对象,因此attr
函数将是d3的。