我每隔400毫秒运行javascript代码并检查页面上是否找到某个元素。
要搜索元素,我们使用JQuery查找并提供html元素作为上下文。
$('html').find('#findMe')
因为我们正在使用带有上下文的find,所以jQuery sizzle会在html元素中添加一个id属性,这反过来会导致css编辑器刷新,不会给我足够的时间进行任何更改。 因为我们每400毫秒运行一次,所以无法编辑CSS。
我想知道是否有办法解决这个问题,可能是Chrome中的设置。
更新:这是来自Sizzle的相关代码,如jQuery 1.6.4中所示 -
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
var oldContext = context,
old = context.getAttribute( "id" ),
nid = old || id,
hasParent = context.parentNode,
relativeHierarchySelector = /^\s*[+~]/.test( query );
if ( !old ) {
context.setAttribute( "id", nid );
} else {
nid = nid.replace( /'/g, "\\$&" );
}
if ( relativeHierarchySelector && hasParent ) {
context = context.parentNode;
}
try {
if ( !relativeHierarchySelector || hasParent ) {
return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
}
} catch(pseudoError) {
} finally {
if ( !old ) {
oldContext.removeAttribute( "id" );
}
}
}
答案 0 :(得分:1)
作为一个直接的解决方案,我建议给予" Stylebot"尝试镀铬扩展。它是Chrome Devtools(您遇到问题)的替代方案,并允许您覆盖页面上的CSS。另外,您可以保存CSS,这样您就可以刷新页面并继续使用与迭代相同的样式并改进代码。
默认情况下,Sizzle不会为任何元素添加ID。虽然也许你的意思是你有脚本重写找到的元素的ID属性?
我建议再看看你的剧本,看看是否有更好的方法来实现你的目标。理想情况下没有超时。也许在页面加载时运行一次。或者创建一个函数并将其附加到将生成新元素的特定事件,因此需要您运行查找函数。