javascript - Javascript/jQuery中节点访问方式的区别

标签 javascript jquery selector

我对 Javascript/jQuery 中的选择器到底如何工作有点困惑。我有两个以几乎相同的方式调用的方法,它们似乎返回不同的选择器,但我不太清楚为什么。

if (document.URL.indexOf("search?s=") !== -1){
    updateOldSearch();
} else {
    $("li a:contains('Search')").bind("click", replaceWithSearch);
}

这里的 else 语句一切正常:

function replaceWithSearch(){
    this.parentNode.replaceChild(searchWrapper, this); //Works fine
}

但是当我以在我看来相同的方式访问它时(显然它实际上并不相同),它就崩溃了

function updateOldSearch(){
    var courseTab = $("li a:contains('Search')");
    courseTab.parentNode.replaceChild(newBox, courseTab); //parentNode is undefined
}

对于幕后发生的事情有什么解释吗? jQuery 是否有一些我滥用的自动转换?

最佳答案

在第一个示例中,this 表示 native DOM 节点。在第二个中,courseTab 表示一个 jQuery 对象。

尝试第二个示例:

function updateOldSearch(){
    var courseTab = $("li a:contains('Search')").get(0);
    courseTab.parentNode.replaceChild(newBox, courseTab);
}

关于javascript - Javascript/jQuery中节点访问方式的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17661441/

相关文章:

javascript - 替换没有完整类名的类名

javascript - Highcharts 多种填充颜色

java - 带有java选择器的无限循环

jQuery 选择器查找每个元素集中的第一个子元素

javascript - 如何通过在主 div 上创建滚动条来修复全屏覆盖

javascript - 使用 jQuery 和 CSS 向下滚动窗口时取消隐藏 div

javascript - 选中的复选框计数

javascript - 想要一个 javascript 函数每分钟运行一次,但最多运行 3 次

JavaScript Eval() 生成 'Unexpected Token ) error'

css - 选择相邻 sibling 的 child