選択文字列を取得するためのJavaScript。
function SelectedTexts() {
this.texts = [];
this._traceFrames = function(win){
this._getSelectedText(win);
var len = win.frames.length;
for(var i = 0; i < len; i++){
this._traceFrames(win[i]);
}
};
this._getSelectedText = function(win){
var text;
try {
text = win.getSelection().toString();
} catch(e) {
return;
}
if (text) {
this.texts.push(text);
} else {
var inputAreas = this._getInputAreas(win);
var len = inputAreas.length;
for (var i = 0; i < len; i++) {
var ia = inputAreas[i];
var start = ia.selectionStart;
var end = ia.selectionEnd;
if (start < end) {
this.texts.push(ia.value.substr(start, end - start));
}
}
}
};
this._getInputAreas = function(win){
var elements = win.document.getElementsByTagName('*');
var inputAreas = [];
var len = elements.length;
for (var i = 0; i < len; i++) {
var el = elements[i];
var tagName = el.tagName.toLowerCase();
if(tagName == 'textarea') {
inputAreas.push(el);
} else if (tagName == 'input') {
var type = el.type.toLowerCase();
if (!type || type == 'text') {
inputAreas.push(el);
}
}
}
return inputAreas;
};
this._traceFrames(window);
this.first = this.texts[0];
this.length = this.texts.length;
this.each = function(func) {
var len = this.texts.length;
for (var i = 0; i < len; i++) {
func(this.texts[i]);
}
};
}
Firefox 2.0.0.x にて確認。
選択文字列をJavaScriptで取得する場合、単一のページ上の文字列・フレーム分割されたページの文字列・フォームのテキスト入力欄内の文字列ではそれぞれ取得方法が異なり、ややこしいです。このスクリプトは、それら色々な箇所の選択文字列ををまとめて一括で取得するためのものです。
フレームやテキスト入力欄がある場合、ウィンドウ内には選択文字列が複数現われる場合もあるため、選択された文字列は配列(的なオブジェクト)として取得されます。
インラインフレーム(iframe)内の選択文字列は取得できません。