Nul*_*uli 5 javascript jquery internet-explorer dom rangy
代码:http://jsfiddle.net/4hV6c/4/ 只做任何选择,你会在ie8中得到一个脚本错误
我正在尝试这样做:
$(end_node.parentNode).has(start_node)
Run Code Online (Sandbox Code Playgroud)
在现代浏览器(chrome,ff,opera等)中,如果start_node不在end_node.parentNode中,则返回[],如果找到则返回元素(我忘记了).
现在,end_node是一个文本元素,而parentNode是一个实际的DOM实体.IE将会执行.has,$(end_node).has(start_node)
但这显然是不同的行为.
是否有工作来实现这一目标?
更新:这里有一个词可以覆盖.has()用于我的特定场景..不确定它是否适用于.has的所有情况,因为我不知道所有情况. http://jsfiddle.net/8F57r/13/
问题不是jQuery
跑步
console.log( $("div:has(span)").html() );
console.log( $("div").has($("span")[0]).html() );
Run Code Online (Sandbox Code Playgroud)
但是,以下抛出异常http://jsfiddle.net/mendesjuan/4hV6c/8/
var textNode = $("span")[0].childNodes[0];
$("div").has(textNode);
Run Code Online (Sandbox Code Playgroud)
这意味着您无法将文本节点传递到$.has
. 您应该使用 jQuery 提交错误
出错的行给出以下消息
No such interface supported jquery-1.7.1.js, line 5244 character 3
那是尝试调用contains
节点上的方法。这意味着这确实是 jQuery 尚未解决的 IE 错误。我已经重现了该问题,无需调用$.has
http://jsfiddle.net/4hV6c/10/
// This is broken in IE
var textNode = $("span")[0].childNodes[0];
var divNode = $("div")[0];
divNode.contains(textNode);
Run Code Online (Sandbox Code Playgroud)
解决方法 http://jsfiddle.net/4hV6c/12/
function contains(outer, inner) {
var current = inner;
do {
if (current == outer) {
return true;
}
} while((current = current.parentNode) != document.body);
return false;
}
rangy.init();
$(document).bind("mouseup", function() {
var a = rangy.getSelection();
start_node = a.anchorNode;
end_node = a.focusNode;
var b = a.getRangeAt(0);
var c = b.commonAncestorContainer;
b.selectNodeContents(c);
a.setSingleRange(b);
alert( contains( end_node.parentNode, start_node) );
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
909 次 |
最近记录: |