Мнение: в HTML, возможных дублирующихся идентификаторах или нестандартных атрибутах?

Это не единственный способ, если вы хотите самостоятельно реализовать счетчик графем, но он сложный, и вы должны обратиться к https://unicode.org спецификациям, чтобы все было правильно.

thai_str - это не строка UTF-8, а строка Unicode, содержащая кодовые точки Unicode. Существуют разные категории кодовых точек. Две категории необходимы для подсчета позиций символов:

  • Lo Other_Letter , другие буквы, включая слоги и иероглифы;
  • Mn Nonspacing_Mark , непространственный комбинирующий знак ( нулевая ширина продвижения ).

Если вы пропустите подсчет категории кодовых точек Nonspacing_Mark (Mn), вы примерно увидите, что делает библиотека графем:

import unicodedata as ud

thai_str = 'สีโชคดีเป็นสีชมพู สีโชคร้ายเป็นสีเหลืองและขาว'

for cp in thai_str:
    print(f'{cp}\t{ud.category(cp)}\t{ud.name(cp)}')

print(sum(1 for cp in thai_str if ud.category(cp)[0] != 'M'))

Вывод:

ส   Lo  THAI CHARACTER SO SUA
ี   Mn  THAI CHARACTER SARA II
โ   Lo  THAI CHARACTER SARA O
ช   Lo  THAI CHARACTER CHO CHANG
ค   Lo  THAI CHARACTER KHO KHWAI
ด   Lo  THAI CHARACTER DO DEK
ี   Mn  THAI CHARACTER SARA II
เ   Lo  THAI CHARACTER SARA E
ป   Lo  THAI CHARACTER PO PLA
็   Mn  THAI CHARACTER MAITAIKHU
...
ว   Lo  THAI CHARACTER WO WAEN
35

9
задан Nick Retallack 6 November 2009 в 04:09
поделиться

10 ответов

Обратите внимание, что идентификатор не может запуститься с цифры, таким образом:

<div class="thing" id="5">

недопустимый HTML. Посмотрите то, Что допустимые значения для идентификационного атрибута в HTML?

В Вашем случае я использовал бы идентификатор как thing5 или thing.5.

17
ответ дан 4 December 2019 в 06:00
поделиться
<div class="thing" id="myapp-thing-5"/>

// Get thing on the page for a particular ID
var myThing = select("#myapp-thing-5");

// Get ID for the first thing on the page
var thing_id = /myapp-thing-(\d+)/.exec ($('.thing')[0].id)[1];
12
ответ дан 4 December 2019 в 06:00
поделиться

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

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

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

Я оставил бы атрибут класса, чтобы сделать что ее предназначенный сделать и не перегрузить его с идентификационными обязанностями.

8
ответ дан 4 December 2019 в 06:00
поделиться

Вы будете бросать некоторое управление DOM

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

var whoKnows = document.getElementById('duplicateId');

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

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

<div class="friend04"/>
<div class="featuredFriend04" />

или

<div class="friend friend04" />
<div class="featuredFriend friend04" />

или

<div class="friend objectId04" />
<div class="groupMember objectId04" />

или

<div class="friend objectId04" />
<div class="friend objectId04" id="featured" />

Это все абсолютно законные и допустимые отрывки XHTML. Заметьте, как, в последнем отрывке, что я все еще получил идентификатор, работающий на меня, который хорош. Доступ к элементам их идентификатором очень быстр и легок, таким образом, Вы определенно хотите смочь усилить его, когда Вы можете.

Вы уже проведете достаточно своего времени в JavaScript, удостоверяясь, что у Вас есть правильные значения и типы. Помещение дублирующихся идентификаторов на странице просто сделает вещи тяжелее для Вас. Если можно найти способы записать совместимую стандартами разметку, она обладает многими практическими преимуществами.

11
ответ дан 4 December 2019 в 06:00
поделиться

При рассмотрении того, что у Вас может быть несколько классов на элемент, разве Вы не могли создать уникальный идентификатор как дополнительный класс на элемент? Тот путь, мог быть больше чем один элемент с тем же "идентификатором" без идентификационных коллизий атрибута HTML.

<div class="thing myapp-thing-5" />
<div class="thing myapp-thing-668" />
<div class="thing myapp-thing-5" />

Было бы легко затем найти эти узлы и найти их соответствующую запись DB с небольшой обработкой строк.

3
ответ дан 4 December 2019 в 06:00
поделиться

Если Вы устанавливаете нестандартные свойства, уверены любому набору их программно (поскольку все будет законно тот путь), или пройдите проблему пересмотреть дату!-)

Но я использовал бы идентификатор со значимым словом, предварительно ожидающим идентификатор DB, и затем использовал бы .getElementById, как каждый необходимый informtion под рукой...

1
ответ дан 4 December 2019 в 06:00
поделиться

Нестандартные атрибуты прекрасны, если Вы используете XHTML и не торопитесь для расширения DTD, Вы используете для покрытия новых атрибутов. Лично, я просто использовал бы более уникальный идентификатор, как некоторые из других людей предложили.

0
ответ дан 4 December 2019 в 06:00
поделиться

В HTML5 Вы могли сделать это как это:


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            window.addEventListener("DOMContentLoaded", function() {
                var thing5 = document.evaluate('//*[@data-thing="5"]', 
                document, null, XPathResult.FIRST_ORDERED_NODE_TYPE ,null);
                alert(thing5.singleNodeValue.textContent);
            }, false);
        </script>
    </head>
    <body>
        <div data-thing="5">test</div>
    </body>
</html>
1
ответ дан 4 December 2019 в 06:00
поделиться

Мне не нравится решение John Millikin. Это собирается быть интенсивным производительностью на больших наборах данных.

Оптимизация на его коде могла заменять регулярное выражение вызовом к substring() так как первые несколько символов идентификационного свойства являются постоянными.

Я пошел бы с соответствием class и затем определенное id все же.

0
ответ дан 4 December 2019 в 06:00
поделиться

Отслеживание Ваших данных через DOM кажется шатким мне; помните, те идентификаторы являются глобальными переменными, поэтому если существует шанс, чей-либо сценарий может найти свой путь на Вашу страницу, это уязвимо. Для лучших результатов загрузите свои данные в объект в рамках анонимной функции и запишите таблицу (или большой вложенный список ОТДЕЛЕНИЙ) впоследствии.

0
ответ дан 4 December 2019 в 06:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: