检查JavaScript中是否存在节点值

检查JavaScript中是否存在节点值,javascript,jquery,Javascript,Jquery,我从加载的AJAX页面中获取href值:每次加载AJAX页面时,它都从新加载的页面中获取值 我使用它来获得正确的href值: firstURL=l[0]。子节点[0]。属性[0]。节点值 但是,在最后一页上,此节点不存在(因为我们在最后一页上),并返回: Uncaught TypeError: Cannot read property 'attributes' of undefined trans.js:393 (anonymous function) trans.js:393 j jquery

我从加载的AJAX页面中获取
href
值:每次加载AJAX页面时,它都从新加载的页面中获取值

我使用它来获得正确的
href
值:

firstURL=l[0]。子节点[0]。属性[0]。节点值

但是,在最后一页上,此节点不存在(因为我们在最后一页上),并返回:

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
存在,是否有方法分配此变量?

您可以在尝试访问它之前检查是否存在子节点:

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()

直接返回的,在取消引用它之前,您应该检查
l[0].childNodes[0]
是否存在

if(l[0].childNodes[0]) {
    firstURL = l[0].childNodes[0].attributes[0].nodeValue;
} else {
    firstURL = <default value>;
}
if(l[0].childNodes[0]){
firstURL=l[0]。子节点[0]。属性[0]。节点值;
}否则{
firstURL=;
}
或作为三元:

firstURL = (l[0].childNodes[0]) ? l[0].childNodes[0].attributes[0].nodeValue : <default value>;
firstURL=(l[0].childNodes[0])?l[0]。子节点[0]。属性[0]。节点值:;
使用jQuery(如有问题的标签所示),这可能变得非常简单:

var href = $('a.yourlink').attr('href');
由于
$('a.yourlink')
与任何DOM元素都不匹配,最后一页上的该值可能为空。但它不会抛出任何JS异常。因此,要在最后一页设置一些默认值,您可以如下扩展该代码段:

var href = $('a.yourlink').attr('href') || 'my-default-url.html';

var firstURL=l[0]。子节点[0]?l[0]。子节点[0]。属性[0]。节点值:null实际使用jQuery这将更容易解决,因为jQuery涵盖了没有任何匹配结构可进一步深入的情况(通过处理空的匹配集)。请详细说明您的答案。谢谢!你能详细说明我在这个例子中如何使用getAttribute('href')吗?使用
firstURL=l[0].childNodes[0].getAttribute('href')@tmyie添加到答案:)
var href = $('a.yourlink').attr('href') || 'my-default-url.html';