<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script>
function GetParentSpanObj(o) {
var o2 = o;
var st;
while (o2) {
st = o2.nodeName.toLowerCase();
if ((st == "span") || (st == "p")) { return o2; }
if ((st == "div") || (st == "body")) { return null; }
o2 = o2.parentNode;
}
return null;
}
function IsP(o) { //判断父元素中是否包含 P, 如果包含则判断为中文; 中文格式 <p> <span>...</span> <span>...</span>... </p>
var o2 = o;
var st;
while (o2) {
st = o2.nodeName.toLowerCase();
if (st == "p") { return true; }
o2 = o2.parentNode;
}
return false;
}
//该函数为当前 span 内的单词包裹 <b></b>
function DownEn() {
var e = window.event ? window.event : arguments.callee.caller.arguments[0];
var o = e.target ? e.target : e.srcElement; //originalEvent?
if (o.nodeName.toLowerCase() == "b") { return; } // <b></b> 表示被处理过;
var o2 = GetParentSpanObj(o); //获取上层的 sapn 对象, 或 p 对象
var str = o2.innerHTML;
if (str.search(/<b>/i) > -1) { return; } //如果包含 <b> 也是处理过了
arr = str.match(/<\/?[^<>]+>/g); //html 标签 <> 和 </>
if (arr) {
for (var i=0; i<arr.length; i++) { str = str.replace(arr[i], "{" + i + "}"); } //临时 html 标签
}
if (IsP(o)) {
str = str.replace(/[\u3400-\u9FFF]/g, "<b>$&</b>"); //中文, 给单字包裹标签
} else {
str = str.replace(/\b[a-z][a-z0-9\'\-]*?\b/ig, "<b>$&</b>"); //英文, 给单词包裹标签
}
if (arr) {
for (var i=0; i<arr.length; i++) { str = str.replace("{" + i + "}", arr[i]); } //换回 html 标签
}
o2.innerHTML = str;
}
function WordUp() {
var e = window.event ? window.event : arguments.callee.caller.arguments[0];
var o = e.target ? e.target : e.srcElement;
if (o.nodeName.toLowerCase() != "b") { return; } //没有包裹 <b></b> 的不是单词
var str = o.innerHTML;
// if (str.search(/</) > -1) { str = ""; return; }
var str2;
if (o.parentNode.nodeName.toLowerCase() == "em") {
str2 = o.parentNode.getAttribute("title");
str = str + ";" + str2;
}
if (o.parentNode.nodeName.toLowerCase() == "i") {
str2 = o.parentNode.innerText ? o.parentNode.innerText : o.parentNode.textContent;
if (str != str2) { str = str + ";" + str2; }
if (o.parentNode.parentNode.nodeName.toLowerCase() == "em") {
str2 = o.parentNode.parentNode.getAttribute("title");
str = str + ";" + str2;
}
}
//return str;
document.getElementById("result").value = str;
// alert(str);
}
</script>
</head>
<body>
<div onmousedown="DownEn()" onmouseup="WordUp()">
<div><span>111 abc <em title="xxx … yyy"><i>Delphi bbb ccc</i> wanyi <i>abc</i></em> Delphi Delphix xxx Delphi</span>
<p>万一的 Delphi 博客;<i>万一</i>的 Delphi 博客</p>
</div>
<br><br><hr>
<input type="text" name="result" id="result" disabled="disabled" size="181"/>
</div>
</body>
</html>
posted on
2015-10-10 13:39
万一
阅读(
105)
评论()
收藏
举报