Гость
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Чтение комментариев скриптом / 3 сообщений из 3, страница 1 из 1
11.08.2020, 20:04
    #39988754
voodoos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение комментариев скриптом

Привет эврибади!

Столкнулся со странной проблемой. Предистория в двух словах такая: Мне необходимо сделать для SharePoint стандартное решение, которое будет позволять форму добавления\изменения элементов списка разбить на табы, т.е. чтобы поля элемента списка не шли как по-умолчанию тупо подряд, а были разбиты на табы. Это в контексте данной проблемы в принципе не существенно, но суть решения в том, что при загрузке формы у таблицы удаляются TR, которые являются представлениями полей списка, и вставляются в другие таблицы. А так как решение стандартное, заранее не известно где какое поле находится, а эту информацию нужно от куда-то брать. SharePoint, как раз очень удобно, вставляет в результирующий HTML информацию о поле в виде комментариев. Вот как это выглядит:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<tr>
	<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
		<span class="ms-h3 ms-standardheader">
			<nobr>Название<span class="ms-accentText" title="Это поле является обязательным."> *</span></nobr>
		</span>
	</td>
	<td valign="top" width="350px" class="ms-formbody">
		<!-- FieldName="Название"
			FieldInternalName="Title"
			FieldType="SPFieldText"
		-->
		<span id='WPQ27ef8aa2c-5edd-4625-8a7a-50612ab19539Title' data-sp-control='SPFieldText' data-sp-options='{"mode":3,"source":"Title"}'></span>
	</td>
</tr>



Вот так пытаюсь прочитать эти значения:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
let tbody$ = $('TABLE.ms-formtable TBODY');
let tbody = tbody$.get(0);
let container = tbody.parentElement.parentElement;

let fields$ = tbody$.children('TR');
let fields = [fields$.length];

for (let i = 0; i < fields$.length; i++)
	fields[i] = fields$[i];

while (tbody.childNodes.length > 0)
	tbody.removeChild(tbody.childNodes[0]);

tbody.parentElement.parentElement.removeChild(tbody.parentElement);

for (let i = 0; i < fields.length; i++) {
	let cellValue = $(fields[i]).children('TD').get(1);

	let text = cellValue.childNodes[0];

	alert(text.data);
}

var table = document.createElement('TABLE');
container.appendChild(table);

for (let i = 0; i < fields.length; i++)
	table.appendChild(fields[i]);



Но дело в том, что свойство text.data выдает какие-то кракозябры. Если создать комментарий динамически, как-то вот так: let comment = document.createCommand('Commented text'), то свойство data нормально читается, но я даже создал просто HTML страницу и попытался прочитать комментарии скриптом, и тоже почему-то получаю кракозябры.

Как эту хрень побороть?​
...
Рейтинг: 0 / 0
12.08.2020, 08:16
    #39988859
voraa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение комментариев скриптом
voodoos,
На самом деле комментарий это не первый Node в TD.
Первым является текстовый Node (перевод строки)
Попробуйте

let text = cellValue.childNodes[1];

Вот такой вариант нормально показывает комментарии

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
<!DOCTYPE html>
<htmll lang="ru">
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</style>

</style>
</head>
<body>
<table>
<tr>
	<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
		<span class="ms-h3 ms-standardheader">
			<nobr>Название<span class="ms-accentText" title="Это поле является обязательным."> *</span></nobr>
		</span>
	</td>
	<td valign="top" width="350px" class="ms-formbody">
		<!-- FieldName="Название"
			FieldInternalName="Title"
			FieldType="SPFieldText"
		-->
		<span id='WPQ27ef8aa2c-5edd-4625-8a7a-50612ab19539Title' data-sp-control='SPFieldText' data-sp-options='{"mode":3,"source":"Title"}'></span>
	</td>
</tr><tr>
	<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
		<span class="ms-h3 ms-standardheader">
			<nobr>Название<span class="ms-accentText" title="Это поле является обязательным."> *</span></nobr>
		</span>
	</td>
	<td valign="top" width="350px" class="ms-formbody">
		<!-- FieldName="Название"
			FieldInternalName="Title1"
			FieldType="SPFieldText"
		-->
		<span id='WPQ27ef8aa2c-5edd-4625-8a7a-50612ab19539Title' data-sp-control='SPFieldText' data-sp-options='{"mode":3,"source":"Title"}'></span>
	</td>
</tr></table>
</body>
<script>
let tbody = document.querySelector('table>tbody')

let fields = tbody.querySelectorAll('tr')

for (let i = 0; i < fields.length; i++) {
	let cellValue = fields[i].children[1]

	let text = cellValue.childNodes[1];

	alert(text.textContent);
}

</script>
</html>



А вообще лучше сначала проверять nodeType
...
Рейтинг: 0 / 0
12.08.2020, 12:02
    #39988959
voodoos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чтение комментариев скриптом
voraa
voodoos,
На самом деле комментарий это не первый Node в TD.


Ну конечно же! Вот я лошара. )

Огромное спасибо! Бессоные ночи дают о себе знать.

А вообще лучше сначала проверять nodeType

Согласен!
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Чтение комментариев скриптом / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]