Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Получение позиции текста по координатам (https://javascript.ru/forum/events/14872-poluchenie-pozicii-teksta-po-koordinatam.html)

traa 04.02.2011 21:03

Получение позиции текста по координатам
 
Собственно сабж.
Есть координаты, x и y начала текста и координаты x и y конца текста.
Возможно ли по этим координатам определить позицию начала и конца текста?

Иначе говоря выбрав на странице начало этого текста, мы получим некую пару координат, позицию элемента с текстом относительно страницы. Но можем ли мы, имея эту же пару координат на этой же странице каким-то образом получить текущую позицию текста, чтобы затем его выделить?

dmitriymar 04.02.2011 21:50

Цитата:

Сообщение от traa
Есть координаты, x и y начала текста и координаты x и y конца текста.
Возможно ли по этим координатам определить позицию начала и конца текста?

зачем определять то что и так знаешь уже?

traa 04.02.2011 21:54

Вы не совсем поняли. Определить нужно позицию текста для того, чтобы с текстом можно было произвести хоть какие-то операции.

dmitriymar 04.02.2011 22:53

..... Действительно не понимаю. можно определить в каком элементе находится текст(как явно-описать какой сценарий нужно выполнить если над опр. элементом произошло событе так и не явно-определить сначала над каким элементом произошло событие а потом решить какое действие нужно -не нужно в зависимости от элемента).чтобы потом производить действие над и элементом и соответственно со всем что в него вложено.
http://javascript.ru/tutorial/events...entx-y-pagex-y
и прочитал твою пред тему- способ как просто получить срдержимое-тот же текст
Свойство innerHTML устанавливает или получает всю разметку и содержание внутри данного элемента.
var contents = elem.innerHTML
elem.innerHTML = '<p>test!</p>
P.S. о том что innerHTML можно получить содержимое элемента-тега узнал вчера.до этого нигде об этом ни слова не встречал

traa 05.02.2011 02:21

Еще раз объясняю. У тебя есть координаты квадрата допустим. Четыре точки a,b,c,d, по две координаты(x и y) на каждую точку.
Загружается страница. Накладываем наш виртуальный квадрат на страницу по координатам. Получаем внутри этого квадрата какие-то элементы, текст, еще что-то.
Вопрос. Можно ли определить, ЧТО там за элементы?

А по поводу моей предыдущей темы, - не все так просто, иннерХТМЛ там уж точно не работал, советую попробовать результат этой функции потестировать в консоли, уж такие очевидные варианты я пробовал сразу. Аппенд результата этой функции, например, нельзя делать в окружении тэгов (к примеру document.body.append('<div>'+result+'div'); делать нельзя)
Но не будем отвлекаться. Вопрос теперь поставлен более точнее?

dmitriymar 05.02.2011 11:41

контейнер и получить дочерние элементы к нему.
Цитата:

Сообщение от traa
иннерХТМЛ там уж точно не работал, советую попробовать результат этой функции потестировать в консоли, уж такие очевидные варианты я пробовал сразу

он возвращает текстовую строку и с ней следует работать как с текстовой

traa 05.02.2011 12:50

Цитата:

Сообщение от dmitriymar (Сообщение 91195)
контейнер и получить дочерние элементы к нему.
он возвращает текстовую строку и с ней следует работать как с текстовой

Я уже достаточно пояснил по теме топика? У вас будут какие-то соображения по этому поводу?
Давайте вы все замечания по коду будете высказывать в нужной теме?
Попробуйте поиграться с тем кодом, может тогда поймете, о чем я именно.

dmitriymar 05.02.2011 13:02

.....тяжело говорить с человеком на разных языках. особенно когда он планирует сделать открытие и получить нобелевскую премию....
нет более глухого чем тот кто не хочет слышать....
один из вариантов
можно отслеживать скрол ,а разметку всех элементов страницы создавать динамически- и заносить их массив потом сравнивать с координатами скрола и области выделенной и находить те что попадают в область
есть и другие варианты
ну а формулировать мысли стоит правильно и сразу -то получить текст из элемента теперь уже получить элементы из выделеной области

traa 05.02.2011 13:55

Я обязательно учту это в дальнейшем. Нетривиальный вопрос, возможно.
Цитата:

Сообщение от dmitriymar (Сообщение 91202)
.....тяжело говорить с человеком на разных языках. особенно когда он планирует сделать открытие и получить нобелевскую премию....
нет более глухого чем тот кто не хочет слышать....

Давайте не углубляться в риторику, мне абсолютно нет дела до чьих-то философских потуг на форуме яваскрипта.

Цитата:

Сообщение от dmitriymar (Сообщение 91202)
один из вариантов
можно отслеживать скрол ,

Причем здесь скролл?

Цитата:

Сообщение от dmitriymar (Сообщение 91202)
а разметку всех элементов страницы создавать динамически- и заносить их массив потом сравнивать с координатами скрола и области выделенной и находить те что попадают в область

Не совсем понимаю. Занесем мы всю разметку в массив, - и что дальше? Как это поможет определять хотя бы примерные координаты?

Цитата:

Сообщение от dmitriymar (Сообщение 91202)
есть и другие варианты

Этот вариант не оценил, извините. Может, если Вы правильней сформулируете мысль, я пойму, о чем речь.

Цитата:

Сообщение от dmitriymar (Сообщение 91202)
ну а формулировать мысли стоит правильно и сразу -то получить текст из элемента теперь уже получить элементы из выделеной области

Мне не нужно получать текст из элемента, я этого нигде не говорил, мне нужно получить текст, исходя из координат. Максимум, о чем я говорил - это позиция текста по координатам

dmitriymar 05.02.2011 14:28

Цитата:

Сообщение от traa
Не совсем понимаю. Занесем мы всю разметку в массив, - и что дальше? Как это поможет определять хотя бы примерные координаты?

стили сss координаты для контейнеров

для чего скрол-да потому что экран в видении мыши имеет координаты-не больше чем разрешение экрана а страница может по высоте и ширине привышать их.
с текстом ты не можешь производить никаких действий-ты действия можешь проводить с элементами вмещающими текст-так понятно? так что сначала определи какие элементы попадают в твою область.
исключения только элементы формы инпут и текстэрия

dmitriymar 05.02.2011 16:43

ну дак паря если они для тебя очевидны ? какого ...я ты задаёшь тупые вопросы ? и хочешь на на них каких то новых ответов и возможностей кроме очевидных?:-E
ты получил что хотел -возват к #4 (permalink)
почему то это тогда для тебя не было очевидным.
и ещё одно-подумай почему никто не ответил на этот твой пост ...

traa 05.02.2011 16:49

Я начинаю понимать, почему у вас такая карма.

Цитата:

стили сss координаты для контейнеров
Каким образом они могут быть координатами? У стиля, к примеру loaded есть свои координаты? Или это очередная очевидность, - что по стилю можно найти контейнер? Можно. И что? Как это приблизит нас хоть на шаг к поиску определенной области текста (не выделенной мышью, прошу не путать, а просто заданного прямоугольника, допустим) по числовым координатам?

Цитата:

для чего скрол-да потому что экран в видении мыши имеет координаты-не больше чем разрешение экрана а страница может по высоте и ширине привышать их
.
Вы чушь говорите, причем полную.
Посмотрите эту страничку, как определяются координаты мыши.
Потом выделите элемент в консоли и посмотрите, как он будет меняться, если отскроллить в самый низ страницы, когда уже не будет видно результат вывода. И сравните это с вот той ересью, что вы сейчас написали. Это, если вам самому будет лень написать элементарный скрипт для проверки.

Цитата:

с текстом ты не можешь производить никаких действий-ты действия можешь проводить с элементами вмещающими текст-так понятно?
Капитан Очевидность у экрана? Я не понимаю, к чему это сейчас? Вам платят посимвольно? Знаете, мои познания в яваскрипте чуть перешагнули этот безусловно сложный для кого-то рубеж.

Цитата:

так что сначала определи какие элементы попадают в твою область.
С добрым утром! А мы тут, значит, пытаемся все определить, можем ли мы проводить действия с текстом или нет. Именно это и является главным вопросом, - возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?

dmitriymar 05.02.2011 17:01

Цитата:

Сообщение от traa
Цитата:
стили сss координаты для контейнеров
Каким образом они могут быть координатами?

<div id ="fgh" style="position: absolute; top=100px;left=100px;weight=200px;heigt=300px">
что это по твоему если не стили CSS?:-E
как их узнать, задавать и изменять програмно говорить не буду-поскольку это очевидно
и прекрати "блистать" своим "умом"-ты показываешь только насколько ты туп:thanks:
Остальное твоё даж комментировать не хочу....
а по поводу кармы ты не угадал почему она такая

dmitriymar 05.02.2011 17:06

Цитата:

Сообщение от traa
С добрым утром! А мы тут, значит, пытаемся все определить, можем ли мы проводить действия с текстом или нет. Именно это и является главным вопросом, - возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?

тебе 2 варианта уже было . и оба рабочих. если ты чегото не понимаешь-это твои проблемы

traa 05.02.2011 17:18

Цитата:

<div id ="fgh" style="position: absolute; top=100px;left=100px;weight=200px;heigt=300px">
что это по твоему если не стили CSS?
Признайтесь честно, между нами, можно даже в личку, вы специально прикидываетесь дурачком?
Вы вставьте этот бред на страничку, может тоже посмеетесь со мной вместе.
1) Как вы предлагаете определять позицию каждого элемента на странице в значениях top и left? Вы сумасшедший или просто идиот?
Возьмите хотя бы главную гугла (google.com), и проставьте всем элементам там абсолюты и топы с лефтами. После чего, зная координаты точки, топ 108, лефт 108 найдите мне, откуда она будет начинаться. Судя по всему, это для вас будет очень просто.
2) weight? heigt? Да вы даже написать правильно элементарные свойства css (width, height) не можете, какого вы вообще тут делаете? Не мешайте, пожалуйста, идите к черту из топика :)

Цитата:

как их задавать и изменять програмно говорить не буду-поскольку это очевидно
Судя по всему, вам это совершенно не очевидно. Даже не буду думать о том, как бы вы задали эти свойства, если бы когда-нибудь задумались их задать.

Цитата:

и прекрати "блистать" своим "умом"-ты показываешь только насколько ты туп
И прекратите мне тыкать, что ж вы за быдло такое? Вам пытаются объяснить, что вы херню, пардон, пишете, а вы еще и наезжаете, ну что за люди...

Цитата:

тебе 2 варианта уже было . и оба рабочих. если ты чегото не понимаешь-это твои проблемы
О, уже два варианта? Что может быть круче, чем выставление топ, лефт и абсолют ВСЕМ элементам страницы?

Для тех, кто читает с конца, вопрос :
возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?

dmitriymar 05.02.2011 17:19

Цитата:

Сообщение от traa
Цитата:
для чего скрол-да потому что экран в видении мыши имеет координаты-не больше чем разрешение экрана а страница может по высоте и ширине привышать их
.
Вы чушь говорите, причем полную.
Посмотрите эту страничку, как определяются координаты мыши.
Потом выделите элемент в консоли и посмотрите, как он будет меняться, если отскроллить в самый низ страницы, когда уже не будет видно результат вывода. И сравните это с вот той ересью, что вы сейчас написали. Это, если вам самому будет лень написать элементарный скрипт для проверки.

не не могу пройти мимо-ты такую чушь сейчас сморизил....
мышь всегда привязана к разрешению монитора!!
а страницы могут превышать это по размерам-доказательство-полосы скрола существуют!!

dmitriymar 05.02.2011 17:21

Цитата:

Сообщение от traa
Цитата:
<div id ="fgh" style="position: absolute; top=100px;left=100px;weight=200px;heigt=300px">
что это по твоему если не стили CSS?
Признайтесь честно, между нами, можно даже в личку, вы специально прикидываетесь дурачком?
Вы вставьте этот бред на страничку, может тоже посмеетесь со мной вместе.
1) Как вы предлагаете определять позицию каждого элемента на странице в значениях top и left? Вы сумасшедший или просто идиот?
Возьмите хотя бы главную гугла (google.com), и проставьте всем элементам там абсолюты и топы с лефтами. После чего, зная координаты точки, топ 108, лефт 108 найдите мне, откуда она будет начинаться. Судя по всему, это для вас будет очень просто.
2) weight? heigt? Да вы даже написать правильно элементарные свойства css (width, height) не можете, какого вы вообще тут делаете? Не мешайте, пожалуйста, идите к черту из топика

ты точно идиот-не поменял ли ты ник на новый?

traa 05.02.2011 17:33

Вы меня утомляете своей ересью. Вы абсолютно некомпетентны, несете полную чушь и пытаетесь хамить. Сделайте так, как я порекомендовал, - сначала посмотрите страничку апи jquery, ссылку на которую я вам дал, убедитесь, что координаты, выдаваемые pageX и pageY могут выходить далеко за рамки разрешения, потом попытайтесь осуществить свой план и проставить элементам топ и лефт, после чего можете смело идти к черту.

Попросил бы более поток вашего бессознательного прекратить, Шариков, тут в теме другие вопросы решаются, а не устраивается клоунада имени вас.

dmitriymar 05.02.2011 17:43

Цитата:

Сообщение от traa
Попросил бы более поток вашего бессознательного прекратить, Шариков, тут в теме другие вопросы решаются, а не устраивается клоунада имени вас.

клоун здесь один-это ты

traa 05.02.2011 17:48

Как глупо и неуклюже вы ушли от рекомендаций. Вы попробуйте, попробуйте, тогда уже будем думать, кто же клоун.

Маэстро 08.02.2011 14:19

Цитата:

Сообщение от traa (Сообщение 91251)
возможно ли определить, какие элементы попадают в область, обозначенную четырьмя координатами экрана?

Можно пойти от обратного:
-обращаетесь к коллекции DOM-элементов всего своего BODY (можно для уменьшения количества просматриваемых элементов выбрать только элементы класса DIV).
-перебирая последовательно все эти элементы определяете их абсолютные координаты с помощью getOffset()
-сравниваете полученные абсолютные координаты всех этих элементов с координатами Вашего заданного прямоугольника и определяете попадание одних в другие.
-таким образом Вы получите список необходимых элементов; дальше необходимо решить нужны ли Вам элементы, которые "накрывают" заданный прямоугольник, либо нужны только элементы, которые полностью умещаются в заданном прямоугольнике.
function getOffsetRect(elem)
{
    var box = elem.getBoundingClientRect()

    var body = document.body
    var docElem = document.documentElement

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
    var clientTop = docElem.clientTop || body.clientTop || 0
    var clientLeft = docElem.clientLeft || body.clientLeft || 0
    var top  = box.top +  scrollTop - clientTop
    var left = box.left + scrollLeft - clientLeft

    return { top: Math.round(top), left: Math.round(left) }
}


function getOffsetSum(elem)
{
var top=0, left=0;

while(elem)
 {
 top = top + parseInt(elem.offsetTop);
 left = left + parseInt(elem.offsetLeft);
 elem = elem.offsetParent;
 }

return {top: top, left: left}
}


function getOffset(elem)
{
if (elem.getBoundingClientRect)
return getOffsetRect(elem);
else return getOffsetSum(elem);
}

to dmitriymar:
непонятка со скроллером возникла между вами из-за того, что Вы думаете о заданных координатах, как о координатах мыши - в этом случае нужно учитывать скроллеры, а traa говорит об "абсолютно-абсолютных" координатах страницы (а не экрана), например, 3000х5000 px.


Часовой пояс GMT +3, время: 10:39.