One possible way could be using top offset of span. If top offset of a span is larger than that of it's immediate predecessor, then a line break has occurred.
var line = 0;
var prev = 0;
$("span").each(function(e, i) {
var currentSpan = $(i);
if (currentSpan.offset().top > prev) {
line++;
}
currentSpan.attr('data-line-number', line);
prev = currentSpan.offset().top;
})
$("span").click(function() {
alert($(this).attr('data-line-number'))
})
Note :
- It assumes that each word enclosed in span tag.
- Might behave wrongly with empty new lines.
var line = 0;
var prev = 0;
$("span").each(function(e, i) {
var currentSpan = $(i);
if (currentSpan.offset().top > prev) {
line++;
}
currentSpan.attr('data-line-number', line);
prev = currentSpan.offset().top;
})
$("span").click(function() {
alert($(this).attr('data-line-number'))
})
#content {
width: 200px;
border: solid 2px black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="content">
<span>AAA</span><span>AAA</span><span>AAA</span><span>AAA</span><span>AAA</span>
<span>BBB</span><span>BBB</span><span>BBB</span><span>CC</span>
<span>AAA</span><span>AAA</span><span>AAA</span><span>AAA</span>
<span>AAA</span>
<span>BBB</span><span>BBB</span><span>BBB</span><span>CC</span>
</div>