javascript
  • html5
  • 2012-08-14 18 views 11 likes 
    11

    Czy istnieje sposób na uzyskanie wszystkich 3 wartości danych z tego elementu?Czy możliwe jest posiadanie wielu atrybutów danych- {imie} w HTML5?

    <div id="viewport" 
        data-requires='js/base/paths' 
        data-requires='js/base/dialog' 
        data-requires='js/base/notifier'> 
    

    Przydałoby się to w przypadku projektu, który rozpoczynam. W ten sposób mogę załadować wymagane moduły js i połączyć je z domem. Wiem, że to może zabrzmieć dziwnie, ale próbuję czegoś nowego tutaj.

    +2

    Prawdopodobnie oznaczało wymaganie danych. Nie sądzę, że możesz to zrobić. Dlaczego nie połączyć ich wszystkich? data-require = 'js/base/paths | js/base/dialog | js/base/notifier' –

    +0

    Myślę, że pozostanę przy ich łączeniu. Jedynym powodem, dla którego warto napisać 3, było sprawienie, by wyglądał ładnie dla nowych deweloperów dołączających do zespołu. –

    +0

    Tak, byłoby miło móc to zrobić –

    Odpowiedz

    3

    Możesz umieścić je wszystkie w jednym, jeśli je rozdzielisz, a następnie podzielisz i umieścisz w tablicy.

    // oops here's plain JS 
    var arrayData = document.getElementById('viewport').getAttribute('data-requries'); 
    var arr = arrayData.split(','); 
    
    for (i = 0; i < arr.length; i++) { 
        console.log(arr[i]); 
    } 
    

    http://jsfiddle.net/S7D2D/1/

    16

    Odpowiedź na to pytanie jest to, że HTML nie obsługuje wielu wystąpień tej samej nieruchomości. Wszystkie typowe sposoby, w jakie możesz pobrać ten atrybut, będą pobierać tylko jedną z nich.

    Najczęstszym sposobem rozwiązania tego problemu jest użycie pojedynczej instancji atrybutu i wstawienie wielu ścieżek jako wartości. Ścieżki są zwykle oddzielone średnikami.

    <div id="viewport" data-requires='js/base/paths;js/base/dialog;js/base/notifier'> 
    

    Następnie użyj kodu, aby podzielić atrybut wielowartościowy na tablicę.

    var requiredPaths = document.getElementById("viewport").getAttribute("data-requires").split(";"); 
    
    +0

    Ta metoda działa z menu rozwijanymi Fundacji, aby umożliwić wiele opcji danych takich jak to: 'data-options =" ​​is_hover: true; align: right "'. Dzięki, ponieważ nie mogłem znaleźć nigdzie indziej. – lwalden

    7

    Można użyć bardziej złożonych struktur w ramach atrybutów data-.

    Zamiast tego:

    <div id="viewport" 
    data-requires='js/base/paths' 
    data-requires='js/base/dialog' 
    data-requires='js/base/notifier'> 
    

    można to zrobić:

    <div id="viewport" 
    data-requires='["js/base/paths", "js/base/dialog", "js/base/notifier"]'> 
    </div> 
    

    Dowód użyciu jQuery.data() (który po prostu pobiera tablicę w ten sposób: jQuery('#viewport').data('requires')) jest tutaj: http://jsfiddle.net/3StZs/

    +0

    Ciekawe, czy są jakieś przeglądarki dławiące w tym ... –

    +0

    @rohit_wason: Dlaczego się o to martwisz? Ta technika działa już od wielu lat i najprawdopodobniej obsługiwane są nawet opuszczone przeglądarki (chociaż po pierwsze nie powinny być już używane, a po drugie, wersja jQuery musiałaby je wspierać). Czy masz jakieś szczególne obawy? jQuery wydaje się być całkiem kompatybilny z bardzo starymi przeglądarkami, jeśli twoje jest dużo starsze, być może będziesz musiał użyć znacznie starszej wersji jQuery, aby go obsługiwać. – Tadeck

    +0

    Mój pierwotny komentarz dotyczył naprawdę używania wielu atrybutów. Nie sądzę, abym dokładnie przeczytał to pytanie. Teraz widzę. –

    Powiązane problemy