Stack Overflow Q16359314
Provides $.fn.indexOfTag(tag).
by acheong87
HTML
<div id="example1">Hello, <b>Andrew</b>. What would you & your friend like to <strike>do</strike> eat?</div>
<div id="example2">Hello, <b>Andrew</b>. <i>What would you & your friend like to <strike>do</strike> eat?</i></div>
<div id="example3">Hello, <b>Andrew</b>. What would <i>you & your friend</i> like to <strike>do</strike> eat?</div>
<pre id="output"></pre>
JavaScript
$.fn.indexOfTag = function (tag) {
var nodes = this[0].childNodes;
var chars = 0;
for (var i = 0; nodes && i < nodes.length; i++) {
var node = nodes[i];
var type = node.nodeType;
if (type == 3 || type == 4 || type == 5) {
chars += node.nodeValue.length;
} else if (type == 1) {
if (node.tagName == tag.toUpperCase()) {
return chars;
} else {
var subIndexOfTag = $(node).indexOfTag(tag);
if (subIndexOfTag == -1) {
chars += $(node).text().length;
} else {
chars += subIndexOfTag;
return chars;
}
}
}
}
return -1;
}
$(document).ready(function () {
$('#output').append($('#example1').indexOfTag('strike') + '\n');
$('#output').append($('#example2').indexOfTag('strike') + '\n');
$('#output').append($('#example3').indexOfTag('strike') + '\n');
});