html & [removed] How to store data referring to html elements

前端 未结 8 1146
悲哀的现实
悲哀的现实 2020-12-31 15:29

I\'m working on a web application that uses ajax to communicate to the server. My specific situation is the following:

I have a list of users lined out in the html p

相关标签:
8条回答
  • 2020-12-31 16:06

    Perhaps using custom attributes, so for a user's list element, add attributes for the variables:

    <li uid="theuserid" ustatus="thestatus"></li>
    

    The values can then be got with the attr function:

    $("li").attr("uid")
    

    And

    $("li").attr("ustatus")
    

    Note: The selectors will need to be changed, obviously

    Please note that there are differing opinions on the use of custom attributes - however, this should be fine for every major browser. It is also the least complex solution I can think of. It doesn't require jumping to sibling elements to get data, or finding elements nearby, which can all add a small amount of overhead to processing - I try to minimise the amount of extra bloat I add to the DOM when doing such things.

    0 讨论(0)
  • 2020-12-31 16:14

    In this case, I think custom attributes might be overkill. You can store the user-id in the id-attribute, since there will only be one instance of the user in the list, right? Also, the status of the user could be stored in the class-attribute. In this way, each user could be given different styling in CSS, such as green for active, yellow for a non-activated account, and red for a suspended account.

    The code for fetching the status will, however, be a little more complex compared to using a custom attribute (But only if you also want to have multiple classes). On a more positive note, the HTML will validate with this approach whereas it would not with custom attributes.

    <ul id="userList">
        <li id="uid123" class="active">UserName X</li>
        <li id="uid456" class="suspended">Mr. Troll</li>
    </ul>
    
    /**
     * Simple function for searching (strict) for a value in an array
     * @param array arr The array to look in
     * @param mixed val The value to look for in arr. Note that the value is looked for using strict comparison
     * @return boolean true if val is found in arr, else false
     */
    function searchArray(arr, val) {
        for(var i = 0, len = arr.length; i < len; i++) {
            if(arr[i] === val) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * Gets a known status from a string of class names. Each class name should be separated
     * by a space.
     * @param string classNames The string to check for a known status
     * @return string|false The status if found in classNames, else false
     */
    function getStatus(classNames) {
        // The different statuses a user can have. Change this into your own!
        var statuses = ['active', 'suspended', 'inactive'], 
            nameArr = classNames.split(" ");
        for(var i = 0, nameLen = nameArr.length; i < nameLen; i++) {
            // If we find a valid status among the class names, return it
            if(searchArray(statuses, nameArr[i])) {
                return nameArr[i];
            }
        }
        return false; // We didn't find any known status in classNames
    }
    
    var id = $("li").attr("id"); // Fetches the id for the first user
    var status = getStatus($("li").attr("class")); // Fetches the status of the first user
    
    0 讨论(0)
提交回复
热议问题