este es mi codigo Solo funciona cuando hago clic en la primera letra de cualquier palabra. Luego me da la posición de esa palabra como 0 para la primera palabra, 1 para la segunda, etc. Pero cuando hago clic en el medio o en cualquier lugar, no toma el número de posición hasta que no hago clic en el comienzo de la primera letra . Así es como se ejecuta mi código:
$("#checktext").on('click', function(e) { var text = document.getElementById("checktext").value, element = $("#checktext")[0], arr1 = text.split(" "), length = 0, selectIndex = element.selectionStart; if (selectIndex == 0) { console.log(arr1.indexOf(arr1[0])); } else { for (var i = 0; i < arr1.length; i++) { length = length + arr1[i].length + 1; if (length == selectIndex) { console.log(i + 1); break; } } } }); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> </script> <textarea id="checktext">This will only work if click on start of each letter.</textarea>El problema está en tu condición:
length == selectIndexEsto solo es cierto para la primera letra de cada palabra. Pero quiere que sea cierto para el rango de letras de cada palabra:
selectIndex >= startOfWord && selectIndex <= endIndexOfWord $("#checktext").on('click', function(e) { var text = document.getElementById("checktext").value, element = $("#checktext")[0], arr1 = text.split(" "), length = 0, selectIndex = element.selectionStart; for (var i = 0; i < arr1.length; i++) { let start = length; // start index of the next word to check length = length + arr1[i].length; // end index of your next word to check if (selectIndex >= start && selectIndex <= length) { console.log("Selected Index: " + i); break; } length++; // add the whitespace after the check } }); <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <textarea id="checktext">This will only work if click on start of each letter.</textarea>Además: probablemente debería usar un nombre de variable diferente en lugar de length . No es la longitud sino el índice final de tu palabra . Supongo que en parte por eso ocurrió este error, esperas que la variable sea algo diferente de lo que es.