I made a pure JavaScript solution ("Vanilla JS"), as a branch of your question's jsfiddle. Maybe of interest for some readers:
https://jsfiddle.net/rplantiko/u2gLr64c/
(function(){
var result = document.getElementById("result");
var container = document.getElementById("container");
var cells = toArray(
document.getElementsByTagName("td")
);
var isCellVisible = isChildElementVisible( container );
container.addEventListener("scroll",determineVisibleRows);
determineVisibleRows();
function determineVisibleRows() {
result.value =
cells.filter( isCellVisible ).map( rowIndex ).join(',');
}
function isChildElementVisible(container) {
var containerHeight = parseInt(getComputedStyle(container).height);
return function(element) {
var containerTop = parseInt( container.scrollTop );
var containerBottom = containerTop + containerHeight;
var elemTop = element.offsetTop;
var elemHeight = parseInt(getComputedStyle(element).height);
var elemBottom = elemTop + elemHeight;
return (elemTop >= containerTop &&
elemBottom <= containerBottom);
}
}
function toArray(arraylikeObject) {
return Array.prototype.slice.call( arraylikeObject, 0 )
}
function rowIndex( cell ) {
return cell.parentNode.rowIndex+1;
}
})()