作为Javascript的新手,我无法理解如何访问以下函数的输出:
.append("svg:text")
.attr("text-anchor", "middle")
.attr('x', 0)
.attr('y', -10)
.attr('class', "label")
.append('svg:tspan')
.attr('x', 0)
.attr('dy', 0)
.text(dimensionLabels)
我所理解的是,当它作为回调函数在.text中传递时,它会成功返回一些显示在浏览器中的文本(例如“Header [n°1]”):
.text(dimensionLabels.split('[', 2))
所以我假设dimensionLabels返回一些字符串,好像我用.text(“myString”)替换.text(dimensionLabels),原始文本(“Header [n°1]”)成功替换为“myString” ”
但是,我需要做的是从dimensionLabels访问文本并处理它,例如使用:
import requests
from bs4 import BeautifulSoup
def get_html(url):
url = ('https://m.vk.com/bageto?act=members&offset=0')
r = requests.get(url)
return r.text
def get_total_pages(get_html):
soup = BeautifulSoup(get_html, 'lxml')
pages = soup.find('div', class_='pagination').find_all('a', class_='pg_link')[-1].get('href')
total_pages = pages.split('=')[2]
return int(total_pages)
def main():
base_url = 'https://m.vk.com/bageto?act=members&offset='`enter code here`
total_pages = get_total_pages(get_html)
for i in range(50, total_pages, 50):
print (i)
但这会产生以下错误:
TypeError:dimensionLabels.split不是函数
有人可以描述上述功能是如何工作的,以及我应该怎么做来访问它的输出?
答案 0 :(得分:1)
dimensionLabels
看起来像是一个以字符串作为参数的函数,而不是字符串。
然后,看起来它正在查看属性的__
对象,即一个名为dimensions
的数组,然后查找索引[d]
,它可能包含要用作文本的属性title
。如果没有,那么它只返回你给它的参数d
。
所以,如果你试图使用它,你需要传递一个字符串来返回__.dimensions[d].title
的结果,或者如果找不到它,那么只需要字符串,也许就像这样{{1 }}。然后,您将收到一个字符串给您,您可以在结果或整个事件上致电dimensionsLabels("someText")
:.split()
你这样做的方法是在一个函数上调用dimensionsLabels("someText").split('[', 2)
,我认为,.split()
大部分都是字符串。
答案 1 :(得分:1)
.text
将函数作为参数,然后在内部调用它,并传递d
(基准)参数。因此,由于.text
想要一个函数,只需创建自己的匿名函数并将调用包装到dimensionLabels
:
.text(function(d){
var string = dimensionLabels(d);
return string.split('[', 2);
})
对评论的回应
d3
.text
方法可以使用字符串或返回字符串的函数。如果你给它一个字符串,它会将文本设置为该字符串。如果你给它一个函数,那么的函数不会立即被调用。相反,在引擎盖下,d3
稍后会调用它。当它发生时,它传入d
参数,这个d
参数是绑定到DOM的那一块的基准。 (在某些时候,您的代码是通过.data
调用进行数据绑定)。
由于此行而致电dimensionLabels("myString")
时收到错误消息:
__.dimensions[d].title
您有一个名为__
的对象,其属性为dimensions
。该属性是一个数组或对象,可以编入索引(我不知道,因为你已经提供了足够的代码供我确定):
__.dimensions["myString"]
返回 undefined 。 undefined 永远不会有名为title
的属性。而BAM,你得到了你的错误。