Skip to content

Instantly share code, notes, and snippets.

@Griever
Created June 8, 2013 08:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Griever/5734515 to your computer and use it in GitHub Desktop.
Save Griever/5734515 to your computer and use it in GitHub Desktop.
テキスト置き換えスクリプト
暇つぶしに書いたテキスト置き換えスクリプト。
FirefoxとChromeで動作確認。
なぜか定期的に話題になるけど需要あるの?
javascript:/*Text-Replace*/(function(){
var data = [
{
before: 'Griever',
after : '┐(´ー`)┌',
},
{
before: 'Opera',
after : '<span style="font-size:30pt; color:red;">Opera</span>',
},
['(ぁ', ''], /* before, after と書くのが怠い */
];
main(document.body);
window.addEventListener('AutoPagerize_DOMNodeInserted', function(event){
main(event.target);
}, false);
function main(aNode) {
var _range = document.createRange();
_range.selectNodeContents(document.body);
for (var i = 0; i < data.length; ++i) {
var before = data[i].before || data[i][0];
var after = data[i].after || data[i][1];
var xpath = '//text()[contains(self::text(),' + escapeXPathExpr(before) + ') and not(ancestor::textarea) and not(ancestor::script) and not(ancestor::style)]';
var result = document.evaluate(xpath, aNode, null, 7, null);
var arr = [];
for (var u = 0; u < result.snapshotLength; ++u) { arr[u] = result.snapshotItem(u); };
for (var u = 0, node; node = arr[u]; ++u) {
var v = node.nodeValue.split(before).join(after);
var df = _range.createContextualFragment(v);
var range = document.createRange();
range.selectNode(node);
range.deleteContents()
range.insertNode(df);
};
};
}
/* http://d.hatena.ne.jp/amachang/20090917/1253179486 */
function escapeXPathExpr(text) {
var matches = text.match(/[^"]+|"/g);
function esc(t) {
return t == '"' ? ('\'' + t + '\'') : ('"' + t + '"');
}
if (matches) {
if (matches.length == 1) {
return esc(matches[0]);
} else {
var results = [];
for (var i = 0, len = matches.length; i < len; i ++) {
results.push(esc(matches[i]));
}
return 'concat(' + results.join(', ') + ')';
}
} else {
return '""';
}
}
})(document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment