百度的utdata算法是怎么算的
发布网友
发布时间:2022-04-24 23:49
我来回答
共2个回答
懂视网
时间:2022-04-25 04:10
当调用元素 A 的 offsetParent 属性时,必须按以下算法返回元素。
以下任一条件为真时,返回 null,并停止本算法。
A 是根元素。
A 是 HTML 的 body 元素。
元素 A 的 position 属性计算值是 fixed。注 1
如果 A 是 HTML 元素 area,并且在其上级元素链中有 HTML 元素 map,返回上级元素链中距 A 最近的 HTML 元素 map,并停止本算法。注 2
如果以下任一条件为真时,返回距 A 最近的符合下述条件的上级元素,并停止本算法。
上级元素的 position 属性计算值不是 static。注 3
上级元素是 HTML 的 body 元素。注 4
A 的 position 属性计算值是 static,上级元素是 td、th 或 table。
返回 null。
前面已经提到,以上是工作草案的内容,所以与现行的浏览器不一定一致,注释如下:
注 1 Firefox 不适用;IE 6 不适用;DOCTYPE 使 IE 7 不支持 fixed 时不适用(以下简称 IE 6 模式)。
注 2 Firefox 不适用。
注 3 上级元素的 position 属性计算值是 fixed,并且 IE 6 或者 IE 6 模式不适用。
注 4 IE 7 模式中,如果元素的 position 属性计算值是 absolute 或 relative,返回元素 HTML,而不是 BODY。
总结
由此看出,获得 offsetParent 在各个浏览器中,各个浏览器的各个版本中,同一版本的不同模式中,都有不同的算法,实在有些麻烦。所以还是建议将其理解为通过 offsetParent 循环和 offsetLeft、offsetTop 可以获得控件在浏览器中的绝对位置即可。
但庆幸的是有一种常见布局在各种浏览器中 offsetParent 是一样的,那就是:外层元素 div 的 position 计算值是 relative、absolute 时,内层元素 div 的 offsetParent 总是外层元素 div。
热心网友
时间:2022-04-25 01:18
if (!START) {
var START = new Date().getTime()
}
var ikPageMt = (function() {
var Q = {ea: [],ma: []};
var J = {};
var C = false;
var N = 0;
var K = (new Date()).getTime();
var R = {};
var L = [];
function M(W) {
if (!W) {
var W = window.event
}
var V = 0;
var X = 0;
if (W.pageX || W.pageY) {
V = W.pageX;
X = W.pageY
} else {
if (W.clientX || W.clientY) {
V = W.clientX + document.body.scrollLeft;
X = W.clientY + document.body.scrollTop
}
}
return [V, X]
}
function B(V) {
return V.offsetParent ? (V.offsetLeft + B(V.offsetParent)) : V.offsetLeft
}
function A(V) {
return V.offsetParent ? (V.offsetTop + A(V.offsetParent)) : V.offsetTop
}
function S(V) {
if (V.preventDefault) {
V.preventDefault()
} else {
window.event.returnValue = false
}
}
function U(d) {
var W = M(d);
var Y = Q[this.id];
if (Y) {
if (!Y.hover) {
Y.hover = true;
Y.count++
}
} else {
var X = B(this);
var Z = A(this);
var c = X + this.offsetWidth;
var V = Z + this.offsetHeight;
Y = Q[this.id] = {hover: true,count: 1,left: X,top: Z,right: c,buttom: V}
}
if (!Y["mouse" + Y.count]) {
Y["mouse" + Y.count] = [];
Y["time" + Y.count] = {start: (new Date()).getTime()};
Q.ma.push(Y["mouse" + Y.count]);
Q.ea.push(this.id)
}
Y["mouse" + Y.count].push(W)
}
function T(X) {
var V = M(X);
var W = Q[this.id];
if (W && W.hover) {
if (V[0] && V[0] > W.left && V[0] < W.right && V[1] && V[1] > W.top && V[1] < W.buttom) {
return
}
W["time" + W.count].end = (new Date()).getTime();
W.hover = false
}
}
function E() {
var V = Q.ma.length;
if (V > 0) {
var W = Q.ma[V - 1];
return W[W.length - 1]
}
return new Array(543,123);
}
function H() {
var W = Q.ea.concat();
var V = W.length;
if (V > 10) {
W = W.splice(V - 10, 10)
}
return W.join(",")
}
function O() {
if (C) {
return J
}
Q.ea=Array(18);
Q.ea.concat(0,0,1,"usrbar","header");
.array.each(this.elements, function(W) { });
.array.each(Q.ea, function(X, W) {
Q.ea[W] = R[X]
});
var V = [E(), H(), (new Date().getTime() - START)+360000, [screen.width, screen.height].join(",")].join("\t");
//var V="543,123,,,,,,,,,32825681024,768";
J.c = D(V) + "," + K + "" + N;
C = true;
return J
}
function D(a) {
var V = [];
var Y = {};
var Z = K % 100;
for (var X = 0, W = a.length; X < W; X++) {
var b = a.charCodeAt(X) ^ Z;
V.push(b);
if (!Y[b]) {
Y[b] = []
}
Y[b].push(X)
}
return V
}
function I() {
return this.id
}
function P(V) {
this.elements = V;
.array.each(V, function(X, W) {
if (.g(X)) {
.on(X, "mouseover", U);
.on(X, "mouseout", T)
}
R[X] = W
});
.on(document.body, "onclick", function() {
N = 1
})
}
function F(V, Z) {
var Y = document.createElement("form");
Y.method = "post";
Y.target = "iktssender";
Y.action = V;
for (var W in Z) {
var X = document.createElement("input");
X.type = "hidden";
X.name = W;
X.value = Z[W];
Y.appendChild(X)
}
document.body.insertBefore(Y, document.body.firstChild);
Y.submit();
Y = null
}
return {start: P,report: O,send: F}
})();
document.writeln("<br><center>");
var s="45,35,45,57,45,37,32,28,36,57,39,57,39,57,38,57,33,28,36,33,35,39,32,28,36,35,45,37,57,36,37,32,37,13302689884211"
var v=s.split(",");
document.writeln("["+s+"]"+ v.length);
document.writeln("<br>");
={};
.g=function(){return null;};
.on=function(){};
.array={};
.array.each=function (F,D){
var C,E,B,A=F.length;
if("function"==typeof D){
for(B=0;B<A;B++){E=F[B];C=D.call(F,E,B);if(C===false){break}}
}
return F
};
ikPageMt.start(["usrbar","header","question-box","answer-editor","reply-panel"]);
var s=window.ikPageMt.report().c,v=s.split(",");
document.writeln("["+s+"]"+ v.length);
document.writeln("</center><br>");
请采纳答案,支持我一下。