powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Чтение комментариев скриптом
3 сообщений из 3, страница 1 из 1
Чтение комментариев скриптом
    #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
Чтение комментариев скриптом
    #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
Чтение комментариев скриптом
    #39988959
voodoos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voraa
voodoos,
На самом деле комментарий это не первый Node в TD.


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

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

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

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


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