Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   textarea поиск в областе нажатия курсора. (https://javascript.ru/forum/misc/68924-textarea-poisk-v-oblaste-nazhatiya-kursora.html)

dima85 17.05.2017 17:20

textarea поиск в областе нажатия курсора.
 
В textarea находится json код, примерно такого содержания:
Код:

{
"id":"test1",
"select":"dsfsdf",
"text":"dsfdsf"
},
{
"id":"test2",
"number":"22",
"text":"dsfdsf"
},
{
"id":"test3",
"select":{"ok":"no"},
"text":"dsfdsf"
}

Когда я мышкой нажимаю допустим в строчку "number":"22",
Я хочу увидеть alert с id этого array то есть "id":"test2".

Такое возможно на JavaScript?

рони 17.05.2017 17:28

Цитата:

Сообщение от dima85
Такое возможно на JavaScript?

да,но может проще пристрелить кого-то, чтоб не мучался?

Diphenyl Oxalate 17.05.2017 17:44

dima85,
по клику на textarea считывать свойство selectionStart (позиция курсора в textarea)

<textarea id="foo" rows="5">клик
по
любой
строчке</textarea>
<script>

document.getElementById("foo").onmouseup = function () {
  var p1 = this.value.slice(0, this.selectionStart).split("\n"),
  p2 = this.value.slice(this.selectionStart).split("\n");
  alert( p1[p1.length - 1] + p2[0] );
};

</script>

рони 17.05.2017 18:08

Цитата:

Сообщение от dima85
находится json код

а где запятые после значения id? и []

dima85 17.05.2017 18:31

Извиняюсь моя синтаксическая ошибка, запятые должны быть.

рони 17.05.2017 19:27

dima85,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>


</head>

<body>
<textarea id="foo" rows="25">


{
"id":"test1",
"select":"dsfsdf",
"text":"dsfdsf"
},
{
"id":"test2",
"number":"22",
"text":"dsfdsf"
},
{
"id":"test3",
"select":{"ok":"no"},
"text":"dsfdsf"
}


</textarea>
<script>
document.getElementById("foo").onmouseup = function() {
    var a = this.value,
        d = this.selectionStart,
        b = a.indexOf("{"),
        c = a.lastIndexOf("}");
    if (!(d < b || d > c)) {
        for (var a = this.value, e = JSON.parse("[" + a + "]"), b = /\}\s*?,\s*?\{/g, c = 0; null != b.exec(a) && b.lastIndex < d;) c++;
        alert(e[c].id)
    }
};
</script>


</body>
</html>

laimas 17.05.2017 19:53

dima85,
скрипты пишут для какого-то практического применения. В данном же такого трудно уловить. Зачем это нужно, какова цель такого действия?

Duda.Ml1986@gmail.com 18.05.2017 12:20

JSON.parse("[" + a + "]"), b = /\}\s*?,\s*?\{/g, c = 0; null != b.exec(a) && b.lastIndex < d;) c++;

alert(e[c].id)


можете пожалуйста объяснить что тут происходит?

рони 18.05.2017 17:27

Duda.Ml1986@gmail.com,
e = JSON.parse("[" + a + "]"), //сделать из текста массив
 b = /\}\s*?,\s*?\{/g, //RegExp для поиска в тексте мест разделени блоков },{
  c = 0;//индекс массива

   null != b.exec(a) && b.lastIndex < d;) //пока в тексте находятся },{  и индекс последней находки меньше индекса клика

    c++;// увеличиваем индекс
    alert(e[c].id) //показываем id блока из массива согласно получившемуся индексу


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