的問題是,之前或之後的內容你<a>
可能有其他的DOM節點,所以他們不會最終會被簡單地TEXT_NODE
s。這是一個更長的實現,但它實現了你的問題所述的結果。 You can view a demo on JSFiddle。
$.fn.wrapSides = function() {
return this.each(function (index, el) {
var $parent = $(el).parent(),
contents = $.makeArray($parent.contents()),
before, after, i, matched, build = $();
for (i = 0; i < contents.length; i++) {
if(contents[i] === el) {
before = contents.slice(0, i);
after = contents.slice(Math.min(contents.length - 1, i + 1), contents.length);
matched = contents.slice(i,i + 1);
break;
}
};
if (before && before.length) {
build = build.add($("<span>").append(before));
}
build = build.add(matched);
if (after && after.length) {
build = build.add($("<span>").append(after));
}
$parent.html(build);
});
};
你只是把它你要充當分離器的標籤,所以你的情況這將是a
:
$("p a").wrapSides();
你只是做了它! thnx一百萬次...你只是讓我的一天!你很棒哦!! :)我欠你一個...... – 2011-03-19 16:53:43
唯一的問題(這可能不是問題),你會在跨度外的'
'和三個跨度而不是兩個跨度。 – 2011-03-19 17:11:49