滚动到javascript中的文本
对于GoogleChrome插件,我试图滚动到包含给定字符串的DOM元素。但是,在筛选选择器之后,我对DOM有点迷茫滚动到javascript中的文本,javascript,jquery,dom,Javascript,Jquery,Dom,对于GoogleChrome插件,我试图滚动到包含给定字符串的DOM元素。但是,在筛选选择器之后,我对DOM有点迷茫 $('*', 'body') .andSelf() .contents() .filter(function(){ return this.nodeType === 3; }) .filter(function(){ // Only match when contai
$('*', 'body')
.andSelf()
.contents()
.filter(function(){
return this.nodeType === 3;
})
.filter(function(){
// Only match when contains given string anywhere in the text
if(this.nodeValue.indexOf(givenString != -1){
//idArr.push(this.offsetLeft);
var ele = $(this);
$('html, body').animate({
scrollTop: ele.offset().top
}, 2000);
return true;
}
return false;
});
每当我尝试获取ele
的顶部偏移量时,我都会获取滚动条相对于文档的顶部偏移量。有什么想法吗?我认为在过滤器中使用$this
可能会引起范围问题,但是过滤器中的this
应该引用当前DOM元素
编辑:
打电话
var ele=$(this.parentNode)代码>
我能够获取包含文本节点的元素,请尝试以下操作:
var matches = $('body, body *').
addBack().
contents().
filter(function(){
return this.nodeType === 3;
}).
filter(function(){
// Only match when contains given string anywhere in the text
if(this.nodeValue.indexOf(givenString) != -1)
return true;
}).first();
基本上与您使用的过滤相同(我只是添加了一个缺少的括号)。这将为您提供与字符串匹配的第一个(如果有)textnode。但是,由于无法直接在DOM中获取textnodes位置(请参阅),您可能需要尝试一个简单的技巧,将其包装在span元素中,然后检索偏移量以滚动页面:
if(matches.length > 0){
var offset = $(matches).wrap('<span>').parent().offset().top;
$('html, body').animate({scrollTop: offset}, 'slow');
}
if(matches.length>0){
var offset=$(匹配).wrap(“”).parent().offset().top;
$('html,body')。动画({scrollTop:offset},'slow');
}
小提琴示例
这将返回匹配的元素。然后,您可以滚动到元素Maybee,以获取此帮助
el = $(":not(html, body, div, table, tbody, tr):contains('" + givenString + "')")