attributes_attributeset - CSDN
精华内容
参与话题
  • 在前端里,想要对静态的HTML变得更加的动态,就必须要对HTML的dom进行操作,dom犹如一个树,树的最底层是文档节点,这个节点顺着上来就到了html节点,也就是根节点。这个根节点有两个分支,一个是body,另一个是head...

           在前端里,想要对静态的HTML变得更加的动态,就必须要对HTML的dom进行操作,dom犹如一个树,树的最底层是文档节点,这个节点顺着上来就到了html节点,也就是根节点。这个根节点有两个分支,一个是body,另一个是head。head里面有很多个子节点,必须要有的是title节点,其他常见的有meta、style、link等,而body里面也有无数个节点。就拿body里面的p节点来讲,里面就有文本,这个文本也是一个节点,称为#text节点。这些就是整个dom树的大概。


            在了解了这些节点后,当我们想要获取一个节点的名字或者改变节点里的属性值或文本值的时候怎么办?这里就要提nodeName、nodeValue和nodeType了。nodeName是只读属性,不能写入和修改,它能够获取元素节点的标签名、属性节点的属性名、文本节点的#text和文档节点的#document。而nodeValue能够写入,它能够获取文本节点的内容、属性节点的属性值,在元素节点里它获取的结果是undefined或者null,nodeValue可以被textContent属性替换。而nodeType返回的是节点类型,不能修改的,常见的节点类型有:

            详细代码如下:

    <body>
    	<p id='ha'>a</p>
    </body>
    <script type="text/javascript">
    	var a = document.getElementById('ha')
    	console.log(a.nodeName)
    	console.log(a.firstChild.nodeValue = 'ha')
    	console.log(a.nodeType)
    </script>

            那么我们想对节点进行操作怎么办,这里有几个属性:getAttributeNode、setAttributeNode和removeAttributeNode。这三个方法分别表示为:getAttributeNode:获取一个节点作为对象、setAttributeNode:设置一个节点和removeAttributeNode:删除一个节点。这三个属性在DOM4版本中已经不推荐使用了,在DOM4版本中推荐使用的是getAttribute、setAttribute和removeAttribute。在DOM4里,属性已不在作为一个特殊的节点了。下面的例子是展示的是新的标准的写法:

            首先是getAttribute,它与getAttributeNode不同的是,返回的是属性值而不是一个对象:

    <body> 
    	<div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div> 
    </body>
    <script> 
    	var a = document.getElementById("sss").getAttribute("value"); 
    	console.log(a)
    </script>
            而getAttributeNode想要得到与上面相同的结果,需要这样写:
    var a = document.getElementById("sss").getAttributeNode("value"); 
    console.log(a.value)

            然后是setAttribute,它是设置属性和属性值,而setAttributeNode是设置一个节点,setAttributeNode不如setAttribute灵活:

    <body> 
    	<div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div> 
    </body>
    <script> 
    	var a = document.getElementById("t")
    	a.firstChild.setAttribute('ha','haha'); 
    	console.log(a.innerHTML)
    </script>
            而setAttributeNode想要实现上面的例子,首先先要创造一个属性名,然后给属性赋值,最后添加到节点上:
    var a = document.createAttribute('ha')
    a.nodeValue = 'haha'
    var b = document.getElementById('t')
    b.firstChild.setAttributeNode(a)
    console.log(b.innerHTML)

            最后是removeAttribute,与removeAttributeNode相同的是都是删除一个属性,但是区别是,前者没有返回值,而后者以attr对象形式返回被删除的属性:

    <body> 
    	<div id = "t"><input type = "hidden" id = "sss" value = "aaa"></div> 
    </body>
    <script> 
    	var a = document.getElementById("t")
    	a.firstChild.setAttribute('ha','haha'); 
    	a.firstChild.removeAttribute('ha')
    	console.log(a.innerHTML)
    </script>
            由于removeAttributeNode的参数是对象,所以用getAttributeNode来获得这个节点对象,所以本身这个方法用的比较费劲:
    var a = document.getElementById("t")
    a.firstChild.setAttribute('ha','haha'); 
    var b = a.firstChild.getAttributeNode('ha')
    a.firstChild.removeAttributeNode(b)
    console.log(a.innerHTML)

            基础铺好了好,就介绍标题里面所提的attributes了。这个attributes返回的是某个节点里所有属性的集合,返回的是一个NamedNodeMap对象,在这个对象里分两部分,两部分的值都相同只是键不同,一部分的键名以0开始依次增加排列,另一部分的键名则是以属性名来命名的,如上面的这个HTML代码,把下面的这段代码放到控制台那里输出就会看到这两部分:

    document.getElementById('sss').attributes

            不过好可惜,attributes属性在DOM4里面被列为不推荐使用,所以这里也没必要深究这个attributes了。这里只列一下attributes的一些常见用法,如下面的两个得到的都是同一个结果:

    <body>
    	<p id="intro">Hello World!</p>
    </body>
    <script type="text/javascript">
    	x=document.getElementById("intro");
    	console.log(x.attributes['id'].nodeName);
    	console.log(x.attributes.getNamedItem("id").nodeName);
    </script>

            最后楼主翻阅MDN的时候,发现nodeName、nodeValue和nodeType都不推荐使用,nodeName被name替换,nodeValue被value替换。不得不感慨DOM4简直想要来个大变脸。

    参考文章:MDN DOM4中不推荐使用的attr对象的某些属性  js中的attributes     


    展开全文
  • attributes() 函数

    2019-04-16 10:04:26
    查看更多 https://www.yuque.com/docs/share/a6cc2c96-9824-4903-acb8-284f4ebeb4fb
    展开全文
  • C# 特性(Attributes)

    千次阅读 2017-02-28 17:00:13
    用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体相关联后,即可在运行时用反射技术查询特性。 例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期...

    用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。特性与程序实体相关联后,即可在运行时用反射技术查询特性。

    例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图:

    又如,在.Net Remoting的远程对象中,如果要调用或传递某个对象,例如类,或者结构,则该类或结构则必须标注[Serializable]特性。还有,我们在构建XML Web服务时用得很多的一个特性就是[WebMegthod],它可让通过HTTP请求的公开方法的返回值编码成XML进行传递。

    特性实际上就是一个类,[Obsolete]特性的实际类名是ObsoleteAttribute,但我们在标注的时候可以不带Attribute后缀,系统在名称转换时会自动给我们加上。

    上面说的都是些.NET系统定义的一些特性,当然还有很多。了解如何自定义特性,有利有我们更好的在ASP.NET MVC编程使用特性,比如给Model类的属性标注特性来验证表单输入的合法性(以后进行介绍)。

    下面我们来模拟一个ASP.NET MVC经常要用到的StringLenth特性,它用于判断用户输入是否超出长度限制。我们现在来模拟它。先定义一个MyStringLenth特性:

    复制代码
    // 用户自定义的带有可选命名参数的 MyStringLenthAttribute 特性类。
    // 该特性通过AttributeUsage限制它只能用在属性和字段上。
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public sealed class MyStringLenthAttribute : Attribute {
        public MyStringLenthAttribute(string displayName, int maxLength) {
            this.MaxLength = maxLength;
            this.DisplayName = displayName;
        }
        //显示的名称,对外是只读的,所以不能通过可选参数来赋值,必须在构造函数中对其初始化。
        public string DisplayName { get; private set; }
    
        //长度最大值,对外是只读的,所以不能通过可选参数来赋值,必须在构造函数中对其初始化。
        public int MaxLength { get; private set; }
    
        //错误信息,标注时可作为可选命名参数来使用。
        public string ErrorMessage { get; set; }
    
        //长度最小值,标注时可作为可选命名参数来使用。
        public int MinLength { get; set; }
    }
    复制代码

    上面若不加AttributeUsage限制,特性可以声明在类型(如结构、类、枚举、委托)和成员(如方法,字段,事件,属性,索引)的前面。

    然后我们把这个特性应用在下面的Order类之上:

    // 应用自定义MyStringLenth特性于Order类的OrderID属性之上。MinLength和ErrorMessage是命名参数。
    public class Order {
        [MyStringLenth("订单号", 6,MinLength = 3, ErrorMessage = "{0}的长度必须在{1}和{2}之间,请重新输入!")]
        public string OrderID { get; set; }
    }

    最后我们看看如何使用MyStringLenth特性验证用户输入字符串的长度:

    复制代码
    //检查成员字符串长度是否越限。
    private static bool IsMemberValid(int inputLength, MemberInfo member) {
        foreach (object attribute in member.GetCustomAttributes(true)) {
            if (attribute is MyStringLenthAttribute) {
                MyStringLenthAttribute attr=(MyStringLenthAttribute)attribute;
                string displayName = attr.DisplayName;
                int maxLength = attr.MaxLength;
                int minLength = attr.MinLength;
                string msg = attr.ErrorMessage;
    
                if (inputLength < minLength || inputLength > maxLength) {
                    Console.WriteLine(msg, displayName, minLength, maxLength);
                    return false;
                }
                else {
                    return true;
                }
            }
        }
        return false;
    }
    
    //验证输入是否合法
    private static bool IsValid(Order order) {
        if (order == null) return false;
    
        foreach (PropertyInfo p in typeof(Order).GetProperties()) {
            if (IsMemberValid(order.OrderID.Length, p))
                return true;
        }
    
        return false;
    }
    
    public static void Main() {
        string input=string.Empty;
        Order order;
        do {
            Console.WriteLine("请输入订单号:");
            input = Console.ReadLine();
            order = new Order { OrderID = input };
        }
        while (!IsValid(order));
        Console.WriteLine("订单号输入正确,按任意键退出!");
        Console.ReadKey();
    }
    复制代码

    输出效果如下:

    System.AttributeUsage声明一个Attribute的使用范围与使用原则。

      

      AllowMultiple 和 Inherited 参数是可选的,所以此代码具有相同的效果:

      

      AttributeTarget的值可以参考1。部分可取值如下:

      

      如果 AllowMultiple 参数设置为 true,则返回特性可对单个实体应用多次。

      如果 Inherited 设置为 false,则该特性不由从特性化的类派生的类继承。

      Attribute.GetCustomAttribute可以获取一个类的Attribute。

    展开全文
  • 3.attributes例 3.1(getElementsByNameNodeListAttributeIEFF.html)<HTML><head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/></HEAD><BODY><DIV ID=...

    3.attributes
    例 3.1(getElementsByNameNodeListAttributeIEFF.html)
    <HTML>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    </HEAD>
    <BODY>
    <DIV ID="RESULT"></DIV>
    <FORM onClick="handleClick(event)">
        <INPUT TYPE="checkbox" VALUE="A" NAME="BOX" id="BOX_A" checked="true">Selection A<BR>
        <INPUT TYPE="checkbox" VALUE="B" NAME="BOX" id="BOX_B">Selection B<BR>
        <INPUT TYPE="checkbox" VALUE="C" NAME="BOX" id="BOX_C">Selection C<BR>
        <INPUT TYPE="checkbox" VALUE="D" NAME="BOX" id="BOX_D">Selection D<BR>
    </FORM>
    <SCRIPT>
        function handleClick(event)
        {
            myString='';
            /* because there is no this method of getElementsByID, ID is unique
             Document.getElementsByName() (Method)

             An accessor method for retrieving objects from within the DOM hierarchy specifically according to their NAME value.
             Property/method value type: NodeList object
             JavaScript syntax: - myDocument.getElementsByName(aName)
             Argument list: aName The name of the element to be retrieved
             */
    /*马克-to-win:event.target是最上层的元素,注意这里点击时,一定得点中方格里,如果点在方格外面,则event.target.id 是空值。*/
               var event = event||window.event;   
               var eSource =event.srcElement||event.target;        
            nodeListBox=document.getElementsByName("BOX");
            /*Element.attributes[] (Collection)
             A reference to a collection of attribute objects for the HTML tag that the Element object represents.
             Property/method value type: Attributes object

    更多请见:https://blog.csdn.net/qq_43650923/article/details/103050580

    展开全文
  • Attributes

    2008-11-19 21:50:00
    Attributes getAttr setAttr attributeExists deleteAttr renameAttr listAttr attributeQuery Time currentUnit currentTime Playback play; play -forward false; play -query -state; play -s
  • R:attr()和attributes()的区别

    千次阅读 2017-03-22 13:45:12
    针对attr()和attributes(),现附上一段代码,帮助区别: > x > attributes(x) $names [1] "apple" "orange" > attr(x,"names") [1] "apple" "orange" > attr(x,"names") > attr(x,"type") > x apple ...
  • yii中attributes属性的巧妙应用

    千次阅读 2014-04-29 23:20:13
    attributes属性  public array getAttributes(array  $names=NULL) public void setAttributes(array $values, boolean  $safeOnly=true) Returns all attribute values. 在用...
  • [DOM] Input elements should have autocomplete attributes (suggested: autocomplete=’tel’, confirm at https://goo.gl/6KgkJg) 这只是个提示,无关紧要,但是在控制台里显示好多感觉很不爽,去掉它! ...
  • 解决方案 使用压缩软件打开jar包 删除:META-INF目录下的除了mainfest.mf,.rsa及maven文件夹 以外的其他所有文件
  • 在一些项目中,我们常看见这样的布局,当标签属性太长时进行换行操作,这又是如何实现的呢 ?...wrap_attributes": "force-expand-multiline" "js-beautify-html": { "...
  • 当需要处理超大JSON文本时,需要Stream API,在fastjson-1.1.32版本中开始提供Stream API。 来看一下示例代码: 示例对象: package json.fastjson.StreamApi; import java.util.HashMap;... private i
  • // Sample Services.... attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heart Rate Service");  attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information Servic
  • 运行一项目,突然遇到错误,明明之前还好好的,为什么突然就报错了。错误如下: Could not resolve all files...Failed to transform file 'android.jar' to match attributes {artifactType=android-mockable-jar,...
  • // 读取文件的创建、修改、访问时间 FileInfo fi = new FileInfo("C://test.txt"); Console.WriteLine(fi.CreationTime.ToString()); Console.WriteLine(fi.LastWriteTime.ToString());...
  • 先看一下源代码: $menuId = isset($_GET['mId']) ? $_GET['mId'] : 0; if ($menuId) { $menu = MenuTree::model()->findByPk($menuId); if(isset($_POST['MenuTree'])){ var_dump($menu->attributes); //在这
  • accepts_nested_attributes_for 在rails中,可以让嵌套表单变得很简单。 举个例子: class Product has_one :detail end class Detail belongs_to :product end cl
  • model->load():
  • 最近接手别人项目用androidStudio 3.0.0编译时发现错误如下: Could not resolve all files for configuration ':view-busipresenter:debugAndroidTestRuntimeClasspath'. &gt; Failed to transform file '...
  • 当pickle.load(file)时,会直接报错:TypeError: file must have ‘read’ and ‘readline’ attributes; 当使用下面的这个代码运行时, with open(file, 'rb') as f: pickle.load(f) 会报错...
  • Failed to transform file 'xxx.aar' to match attributes {artifactType=jar} Failed to transform file 'xxx.aar' to match attributes {artifactType=android-manifest} 在自己封装SDK库的时候想要把自己的库...
1 2 3 4 5 ... 20
收藏数 331,647
精华内容 132,658
关键字:

attributes