アプリ版:「スタンプのみでお礼する」機能のリリースについて

マウスクリックした地点(X,Y座標)に表示されている文字を取得したいのですが、何か方法はありますでしょうか?
文字がないところや画像の場合は何も取得できなくても構いません。
特定のタグで囲まれている文字ではなく、BODY の中で特にタグに囲まれていないテキストを取得したいのです。
単なる文字が取得できるだけでも良いのですが、文章や段落も特定したいので、できれば、HTML中の何文字目なのかということがわかるとありがたいのですが…

A 回答 (3件)

とりあえず、サンプルとして、一文字を取り出すものを作ってみました。


IEのみで動作します。
文字は、取り出したい文字の先頭付近をクリックします。
(そういう感じにしないと次の文字が取り出されます)
----------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS">
<title>サンプル</title>
<script language="JScript">
<!--
function clickChar() {
var range = document.body.createTextRange();
range.moveToPoint(event.clientX, event.clientY);
range.expand("character");
range.select();
alert(range.text);
}
//-->
</script>
</head>
<body onclick="clickChar()">
<h1 class=title>タイトル文字などもある</h1>

文字列が、地の文として入力されている。</br>
クリックされた文字を取り出す。
<hr>
<address>
mailto: your@email.ne.jp<br>
</address>
</body>
</html>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

サンプルソースまで掲載していただき、感謝です。
おかげさまで、マウスクリックした地点の文字を取り込むことができるようになりました。

お礼日時:2006/02/14 09:36

Firefox/Safari 用。



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>サンプル</title><script type="text/javascript">

addEventListener ('load', function () {
////////////////////

function getSelectedChar (root) {
var s = window.getSelection (); // Opera の document.getSelection ではうまくいかない
var n = s.anchorNode;
var i = s.anchorOffset;
return { strChar : n.nodeValue.charAt (i), index : isContainerOf (root, n) ? countCharOffset (root, n, i) : null };
}

function isContainerOf (root, textNode) {
var cn = textNode;
while (cn = cn.parentNode) if (cn == root) return true;
return false;
}

function countCharOffset (root, textNode, charOffset) {
var tw = document.createTreeWalker (root, NodeFilter.SHOW_TEXT | NodeFilter.SHOW_ENTITY_REFERENCE, null, true);
var cn;
var i = charOffset;
while ((cn = tw.nextNode ()) && (cn != textNode)) i += cn.nodeValue.replace (/^\s+/, '').length;
return i;
}

// for test
document.body.addEventListener ('click', function () {
var node;
var s;

node = document.getElementsByTagName ('body')[0];
s = getSelectedChar (node);
alert ( s.strChar + ' (' + s.index + ' th in ' + node.nodeName + '-element)');

node = document.getElementsByTagName ('p')[0];
s = getSelectedChar (node);
alert ( s.strChar + ' (' + s.index + ' th in ' + node.nodeName + '-element)');
}, false);

//////////////////////
}, false);

</script></head><body>
<h1>サンプル</h1>
<p>文字列が、<strong>地の文として</strong>入力されている。クリックされた<em>文字</em>を取り出す。</p>
</body></html>

参考URL:http://lxr.mozilla.org/mozilla/source/content/ba …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

サンプルソースまで掲載していただき、感謝です。
おかげさまで、マウスクリックした地点の文字を取り込むことができるようになりました。

お礼日時:2006/02/14 09:36

IEの場合、範囲指定した文字列(あるいは、前後がスペースになっているような単語は、クリックして範囲拡大することで、1文字も可)は、取得できます。


そういうのでもいいのでしょうか?
HTML中の何行目、何文字目というのはムリっぽいと思います。
段落が<p></p>の様になっているのだったらいくつ目の段落というのは、取得できるように思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!