我从加载的AJAX页面获取href
值:每次加载AJAX页面时,它都会从新加载的页面中获取值。
我用它来获得正确的href
值:
firstURL = l[0].childNodes[0].attributes[0].nodeValue;
但是,在最后一页上,此节点不存在(因为我们在最后一页上),并返回:
Uncaught TypeError: Cannot read property 'attributes' of undefined trans.js:393
(anonymous function) trans.js:393
j jquery.min.js:2
k.fireWith jquery.min.js:2
x jquery.min.js:4
(anonymous function)
如果子节点l[0].childNodes[0].attributes[0].nodeValue
存在,我有没有办法分配这个变量?
答案 0 :(得分:2)
您可以在尝试访问子节点之前检查是否存在子节点:
var firstURL = '';
if(l[0].childNodes.length > 0){ // only if there's more than 1 child node
firstURL = l[0].childNodes[0].attributes[0].nodeValue;
}
附注:
childNodes
包含文本节点,因此您可能更喜欢children
,它只包含元素而不包含文本节点。如果将来在目标之前添加任何文本,您将获取文本节点。getAttribute('href')
而不是获取第一个存在的属性。要使用.getAttribute()
,您只需将.attributes[0]
替换为:
firstURL = l[0].childNodes[0].getAttribute('href');
这将更加健壮,因为如果你曾经为元素添加新属性,这将在更改中存活,而依赖它始终是第一个可能会导致问题。
另请注意,如果您使用getAttribute()
,则无需访问nodeValue
,因为getAttribute()
直接返回实际属性值
答案 1 :(得分:1)
在取消引用之前,您应该检查l[0].childNodes[0]
是否存在。
if(l[0].childNodes[0]) {
firstURL = l[0].childNodes[0].attributes[0].nodeValue;
} else {
firstURL = <default value>;
}
或者作为三元:
firstURL = (l[0].childNodes[0]) ? l[0].childNodes[0].attributes[0].nodeValue : <default value>;
答案 2 :(得分:0)
if(!!l[0].childNodes[0]) {
firstURL = l[0].childNodes[0].attributes[0].nodeValue;
}
答案 3 :(得分:0)
使用jQuery(标记为问题)这可能会变得非常简单:
var href = $('a.yourlink').attr('href');
由于$('a.yourlink')
与任何DOM元素不匹配,因此在最后一页上可能为空。但它不会抛出任何JS异常。因此,要在最后一页上设置一些默认值,您可以像这样扩展该代码段:
var href = $('a.yourlink').attr('href') || 'my-default-url.html';