详细解析jQuery API中文版使用指南

12,218次阅读
没有评论

共计 10989 个字符,预计需要花费 28 分钟才能阅读完成。

本文还有配套的精品资源,点击获取 详细解析 jQuery API 中文版使用指南

简介:《jQuery API 中文说明文档》是 Web 开发者的宝贵资源,详尽解释了如何通过 jQuery 库进行高效的 DOM 操作和事件处理。文档涵盖了选择器、DOM 操作、事件处理、动画效果、AJAX 调用、链式操作、插件使用、遍历方法、实用工具以及版本兼容性等多个关键知识点,是学习和精通 jQuery 的实用参考资料。详细解析 jQuery API 中文版使用指南

1. jQuery 选择器用法

在本章中,我们将探索 jQuery 的核心功能之一——选择器,它允许开发者以简洁的语法快速定位和操作 DOM 元素。我们将从基础选择器开始,逐步深入到更复杂的使用场景,从而让读者能够熟练地使用 jQuery 选择器来提高前端开发的效率。

基础选择器

jQuery 提供了多种基础选择器,这些选择器可以根据 ID、类、标签名等来选取页面中的元素。例如,使用 #id 可以选取具有特定 ID 的元素, .class 可以选取具有特定类的所有元素,而 element 则选取所有具有该标签名的元素。

// 选取 ID 为 "myId" 的元素
$("#myId");

// 选取所有类名为 "myClass" 的元素
$(".myClass");

// 选取所有 

标签的元素 $("p");

复合选择器

当基础选择器不足以满足需求时,我们可以使用复合选择器来构建更加精确的选择条件。复合选择器通常是通过逻辑运算符(如逗号、空格)连接基础选择器来使用。

// 选取 ID 为 "myId" 的 

标签元素 $("#myId p"); // 选取类名为 "myClass" 的元素中的所有 标签元素 $(".myClass input");

在了解了基础选择器和复合选择器之后,我们会进一步探究 jQuery 选择器的高级应用,如层级选择器和过滤选择器,它们能够在选取元素时提供更为丰富的选项。

2. jQuery DOM 操作技术

2.1 jQuery 选择器的高级应用

层级选择器

层级选择器允许我们根据 DOM 树中的层级关系来选择元素。通过使用特定的字符组合,我们可以轻松地定位到需要操作的元素。

层级选择器主要有两种:

  • $('parent> child') 选择所有 parent 的直接子元素 child
  • $('ancestor descendant') 选择所有 ancestor 的后代元素 descendant

示例代码:

// 选择 id 为 parent 的元素的所有直接子元素 div
$('#parent> div')

// 选择 id 为 ancestor 的元素的所有后代元素 p
$('#ancestor p')

使用层级选择器,我们可以精确地控制元素的选取范围,从而提高 DOM 操作的效率和准确性。

过滤选择器

过滤选择器提供了一种更灵活的方式来选取元素,它们可以与基本选择器结合使用,增加更多的选择条件。

例如:

  • :first 匹配第一个元素。
  • :last 匹配最后一个元素。
  • :even :odd 分别匹配偶数和奇数位置的元素。
  • :eq(index) 匹配指定索引位置的元素。

示例代码:

// 选取 id 为 list 的 ul 元素中的第一个 li 元素
$('ul#list li:first')

// 选取 id 为 list 的 ul 元素中所有偶数位置的 li 元素
$('ul#list li:even')

通过组合使用这些过滤选择器,开发者能够轻松实现复杂的选择逻辑,从而进行精确的 DOM 操作。

2.2 jQuery 的元素插入与替换

元素的创建与插入

在 jQuery 中,可以非常简单地创建新的 HTML 元素,并将其插入到 DOM 树中的任何位置。

创建和插入元素的常见方法:

  • $('htmlContent').appendTo(selector) 将创建的元素添加到指定的元素中。
  • $(selector).append(htmlContent) 将指定的 HTML 内容添加到选中的元素内部。
  • $(selector).prepend(htmlContent) 将指定的 HTML 内容添加到选中元素的开始位置。

示例代码:

// 创建一个段落,并将其添加到 id 为 container 的元素中
$('

这是一个新段落

').appendTo('#container') // 将一个列表项添加到 id 为 list 的列表中 $('#list').append('
  • 新列表项
  • ')

    通过这些方法,我们可以根据需要动态地修改页面结构,实现更加丰富和交互式的用户体验。

    元素的删除与替换

    当需要从 DOM 中移除元素或替换元素时,jQuery 提供了简单而强大的方法。

    • $(selector).remove() 用于删除选中的元素。
    • $(selector).replaceWith(newContent) 将选中的元素替换为指定的新内容。

    示例代码:

    // 删除 id 为 item 的元素
    $('#item').remove()
    
    // 将 id 为 oldItem 的元素替换为一个新的段落元素
    $('#oldItem').replaceWith('

    这是一个新元素

    ')

    通过删除和替换元素,可以有效地更新页面内容,这对于单页应用(SPA)开发尤为重要。

    2.3 jQuery 属性与类的操作

    元素属性的获取与设置

    jQuery 提供了简洁的 API 来处理 DOM 元素的属性,无论是在读取还是在设置属性时都非常方便。

    • $(selector).attr(name) 用于获取元素的属性值。
    • $(selector).attr(name, value) 用于设置元素的属性值。

    示例代码:

    // 获取 id 为 image 的元素的 src 属性值
    $('#image').attr('src')
    
    // 设置 id 为 image 的元素的 alt 属性值
    $('#image').attr('alt', '示例图片')
    

    属性操作是前端开发中频繁进行的操作,jQuery 的 API 设计使得这些操作变得轻而易举。

    元素类的添加与切换

    类属性是 HTML 元素中常用的属性,jQuery 提供了一组方法来操作类属性:

    • $(selector).addClass(className) 用于添加类名。
    • $(selector).removeClass(className) 用于移除类名。
    • $(selector).toggleClass(className) 用于切换类名,如果元素有指定的类名,则移除它;如果没有,则添加它。

    示例代码:

    // 给 id 为 box 的元素添加一个类名为 active 的类
    $('#box').addClass('active')
    
    // 移除 id 为 box 的元素的 active 类
    $('#box').removeClass('active')
    
    // 切换 id 为 box 的元素的 active 类
    $('#box').toggleClass('active')
    

    通过类的添加、移除和切换,我们可以控制元素的样式变化,这对于实现动态的样式效果非常有用。

    3. jQuery 事件处理方法

    3.1 jQuery 事件绑定机制

    3.1.1 传统事件绑定方式

    在 jQuery 中,事件绑定是将函数(事件处理程序)与 HTML 元素的事件(如 click、mouseover 等)关联的过程。传统事件绑定方式是通过 .bind() 方法实现,它允许我们将事件处理程序绑定到当前已存在的元素上。

    // 绑定点击事件到所有段落元素上
    $("p").bind("click", function() {alert("Hello world!");
    });
    

    在上述代码中, .bind() 方法接受两个参数:第一个参数为事件名称(这里是 "click" ),第二个参数是一个函数,该函数将在事件触发时执行。需要注意的是, .bind() 方法已被 .on() 方法取代, .bind() 方法的某些功能可以通过 .on() 方法来实现,后者提供了更强大的事件委托机制。

    3.1.2 委托事件处理

    委托事件处理是一种利用事件冒泡原理来管理事件的方法。它将事件监听器绑定到一个父级元素上,利用事件冒泡来处理指定子元素的事件。这样做的好处在于,即使子元素是后来动态添加到 DOM 中的,也能被父级元素捕获并处理。

    // 使用.on()方法进行委托事件处理
    $(document).on("click", "p", function() {alert("Hello from delegate!");
    });
    

    在上述代码中, .on() 方法被用来绑定一个点击事件到 document 上,但只有当点击事件在

    标签内部触发时,才会执行提供的函数。这种方式提高了程序的性能,因为只需要注册一个事件监听器,而不是为每个

    元素单独绑定一个监听器。

    . . . 事件委托的优点
    • 动态内容处理: 委托事件处理使得即使是后来动态添加到 DOM 中的元素也能响应事件。
    • 性能优化: 减少事件监听器的数量,尤其是在处理大量元素时。
    • 简化代码: 可以在一个地方管理事件,避免了在动态添加的元素上单独绑定事件监听器的麻烦。

    事件委托在处理大量动态内容的现代 web 应用程序中变得尤为重要,是提升应用性能和响应性的关键策略之一。

    3.2 jQuery 事件对象详解

    3.2.1 事件对象的属性与方法

    当事件被触发时,jQuery 会创建一个包含事件详细信息的事件对象(event object),并将这个对象作为参数传递给事件处理函数。这个事件对象提供了一系列属性和方法,允许我们获取关于事件的详细信息,或者执行诸如阻止默认行为等操作。

    // 获取事件对象并打印其类型
    $("#some-element").click(function(event) {console.log(event.type); // 将打印 "click"
    });
    

    在上述代码中,当点击 #some-element 元素时,事件处理函数会被触发,事件对象 event 作为参数传递给该函数。函数内使用 event.type 来获取事件类型,并将其打印到控制台。

    . . . 常用的事件对象属性
    • event.type :事件类型(如 "click" "mouseover" 等)。
    • event.target :触发事件的元素。
    • event.pageX event.pageY :事件相对于文档左上角的位置。
    • event.preventDefault() :阻止事件的默认行为。
    . . . 如何使用事件对象进行事件处理

    在处理事件时,事件对象可以用来进行很多有用的操作,例如,在一个输入框上阻止默认的提交行为:

    $("#submit-button").click(function(event) {event.preventDefault(); // 阻止表单提交
      // 可以在这里添加额外的代码处理表单数据
    });
    

    在上述代码中, event.preventDefault() 被调用来阻止表单的默认提交行为。这是一种常见的用途,特别是在单页面应用程序中,我们通常希望使用 AJAX 异步提交数据而不是传统的表单提交。

    3.2.2 自定义事件

    除了绑定到浏览器的原生事件上,jQuery 也允许我们创建和触发自定义事件。这在某些场景下非常有用,例如,我们需要在某个操作完成之后通知其他部分的代码,或者创建一个事件驱动的插件。

    // 创建自定义事件
    $("#my-element").bind("myCustomEvent", function(event) {console.log("Custom event triggered!");
    });
    
    // 触发自定义事件
    $("#my-element").trigger("myCustomEvent");
    

    在上述代码中,我们首先通过 .bind() 方法绑定了一个自定义事件 "myCustomEvent" #my-element 元素上。然后我们使用 .trigger() 方法来触发这个自定义事件,这将导致之前绑定的事件处理函数被执行,控制台将打印出提示信息。

    . . . 自定义事件的使用场景

    自定义事件最适合用在复杂的应用逻辑中,尤其是那些需要在多个不同组件间进行通信的场景。它提供了一种解耦组件的方法,每个组件可以独立地监听或触发事件,而不必直接依赖于其他组件的具体实现。

    通过自定义事件,我们可以把关注点从具体的实现转移到事件上,使得整个应用的架构更加清晰和易于管理。这也为测试和维护带来了极大的方便,因为我们可以模拟和触发事件来进行单元测试或集成测试。

    3.3 jQuery 事件的取消与控制

    3.3.1 阻止事件默认行为

    在 Web 开发中,许多元素有默认的行为,比如链接的点击默认会跳转到另一个页面。通过使用 jQuery,我们可以阻止这种默认行为,以便在不离开当前页面的情况下处理用户的操作。

    $("a.no-link").click(function(event) {event.preventDefault(); // 阻止  标签的默认行为
    });
    

    在上述代码中,我们选择了一个类名为 no-link 元素,并在点击事件中调用了 event.preventDefault() 方法来阻止其默认行为。这意味着即使用户点击这个链接,页面也不会跳转。

    . . . 如何正确使用 event.preventDefault()

    正确使用 event.preventDefault() 对于改善用户体验至关重要。例如,在单页面应用中,我们可能会遇到用户点击了看起来像链接的按钮,而实际上我们希望在不离开当前页面的情况下执行某些操作。在这种情况下,通过阻止链接的默认行为,可以避免刷新页面和丢失用户当前的状态。

    3.3.2 阻止事件冒泡

    事件冒泡是指在 DOM 树中,一个事件不仅仅只在其绑定的元素上触发,还会逐级向上传播到根节点。在某些情况下,我们可能需要阻止事件继续向上冒泡。

    $("div#my-div").click(function(event) {
      // 阻止事件冒泡
      event.stopPropagation();});
    

    在上述代码中, event.stopPropagation() 被用来阻止事件继续向上冒泡。这意味着如果父级元素也绑定了点击事件,它们将不会被执行。

    . . . 事件冒泡的应用场景

    阻止事件冒泡在事件处理中有多种用途。一种常见的情况是当我们在一个父元素中绑定了事件处理函数,而希望子元素的事件处理函数不干扰到父元素时。通过调用 event.stopPropagation() ,我们可以防止这种情况的发生。

    此外,阻止事件冒泡还可以用于避免事件被重复处理。例如,如果你的页面上有一个模态框,当点击模态框外部时,你可能希望关闭模态框而不是触发其父元素上的事件处理函数。

    总结

    本章节介绍了 jQuery 中事件处理的基本机制,包括事件绑定、事件对象的使用以及如何控制事件行为。重点讨论了委托事件处理及其优点,事件对象的属性与方法的详细说明,以及自定义事件的创建和触发方式。同时,本章节也讲解了如何在 jQuery 中取消事件默认行为和阻止事件冒泡。掌握这些事件处理技巧将极大提升前端开发者的代码质量和应用的交互体验。

    4. jQuery 动画效果实现

    4.1 jQuery 基本动画方法

    在 Web 开发中,动画效果是提升用户体验的重要手段之一。jQuery 提供了一些基础的动画方法,让我们可以轻松实现元素的显示、隐藏和切换动画。

    4.1.1 show()、hide()与 toggle()

    show() hide() toggle() 是 jQuery 中最基本的动画方法,它们分别用于显示、隐藏和切换元素的可见状态。

    • show() 方法可以用来显示被隐藏的元素,其语法如下: javascript $(selector).show(speed, easing, callback); 其中, speed 参数表示动画速度,可选值包括 fast slow 或毫秒值; easing 是动画缓动函数,默认为 swing callback 是动画完成后要执行的函数。

    • hide() 方法的使用与 show() 类似,用于隐藏元素: javascript $(selector).hide(speed, easing, callback);

    • toggle() 方法则是根据元素的当前可见状态来决定是显示还是隐藏: javascript $(selector).toggle(speed, easing, callback);

    这些方法可以接受一个可选的回调函数,该函数在动画完成后被调用,从而实现连续的动画效果。

    4.1.2 fadeIn()、fadeOut()与 fadeToggle()

    fadeIn() fadeOut() fadeToggle() 方法专门用于实现淡入和淡出效果。

    • fadeIn() 方法用于将元素逐渐变为可见: javascript $(selector).fadeIn(speed, easing, callback);

    • fadeOut() 方法则相反,用于将元素逐渐变为不可见: javascript $(selector).fadeOut(speed, easing, callback);

    • fadeToggle() 方法用于在 fadeIn() fadeOut() 之间切换: javascript $(selector).fadeToggle(speed, easing, callback);

    这些淡入淡出方法与 show() hide() 类似,但只改变元素的透明度。

    接下来的章节将详细介绍如何使用 animate() 函数创建自定义动画效果,以及动画队列管理和缓动函数的使用。

    5. jQuery AJAX 请求处理

    5.1 jQuery AJAX 基础

    5.1.1 get()与 post()方法

    在使用 jQuery 进行数据交互时, $.get() $.post() 方法是最基本的 AJAX 请求工具。它们用于向服务器发送简单的请求,并获取数据返回。 get 方法主要用于从服务器检索数据,而 post 方法则常用于提交数据到服务器。这里有一个简单的 $.get() 示例代码:

    // 发送 GET 请求获取数据
    $.get('example.php', function(data, status) {console.log('Data:' + data);
      console.log('Status:' + status);
    });
    

    在这个例子中, $.get() 方法接受两个参数:第一个是请求的 URL,第二个是一个回调函数,该函数会在请求成功时被调用。回调函数又接受两个参数, data 是从服务器返回的数据, status 是请求的状态。

    $.post() 方法的用法与 $.get() 类似,区别在于它通常用于向服务器发送数据:

    // 发送 POST 请求提交数据
    $.post('example.php', { name: 'John', time: '2pm'})
      .done(function( msg) {alert( "Data Saved:" + msg);
      });
    

    在这个例子中, $.post() 方法接受三个参数:第一个是请求的 URL,第二个是一个对象,包含要发送到服务器的数据,第三个是一个回调函数,当请求成功完成时调用。

    5.1.2 load()方法的使用

    load() 方法是一种简单但功能强大的 AJAX 方法,它可以加载远程数据并将其放入选定的元素中。 load() 方法的典型用法如下:

    // 加载指定 URL 的内容,并将其插入 id 为 content 的元素中
    $('#content').load('ajax/test.html');
    

    这个方法可以接受最多三个参数:URL,然后是一个可选的回调函数,以及一个可选的映射。回调函数可以接受三个参数,分别是返回的数据、状态和 XMLHttpRequest 对象。

    load() 方法也可以用来发送数据到服务器:

    // 向指定的 URL 发送数据,并将返回的数据加载到 id 为 content 的元素中
    $('#content').load('test.php', { name: 'John', time: '2pm'});
    

    在上面的代码中, test.php 将接收到一个带有 name time 参数的 POST 请求。服务器响应的内容将被加载到具有 id content 的元素中。

    5.2 jQuery AJAX 的高级用法

    5.2.1 AJAX 事件回调处理

    jQuery AJAX 请求提供了一些事件回调方法,可以让你在请求的不同阶段执行代码。比如请求开始时的 beforeSend 回调、请求成功时的 success 回调、请求失败时的 error 回调和请求完成时的 complete 回调:

    $.ajax({
      url: 'example.php',
      method: 'GET',
      beforeSend: function(xhr) {
        // 在发送请求前可以进行一些操作,比如设置请求头
        xhr.setRequestHeader('My-Header', 'some value');
      },
      success: function(data, status) {
        // 请求成功时的操作
        console.log('Data:' + data);
        console.log('Status:' + status);
      },
      error: function(xhr, status, error) {
        // 请求失败时的操作
        console.log('Error:' + error);
      },
      complete: function(xhr, status) {
        // 请求完成时的操作,无论成功还是失败
        console.log('Complete:' + status);
      }
    });
    

    5.2.2 AJAX 全局设置与过滤器

    全局 AJAX 设置可以让你配置默认的 AJAX 选项,这些选项将被所有的 AJAX 请求共享。例如,你可以设置请求超时时间、内容类型、全局错误处理等:

    $.ajaxSetup({
      timeout: 3000,
      contentType: 'application/json; charset=UTF-8',
      globalErrorHandling: true
    });
    

    全局设置可以放在文档加载完成后立即执行,或者放在 $(document).ready() 函数中。这些设置将影响整个页面中随后发起的所有 AJAX 请求。

    5.3 jQuery AJAX 的跨域问题解决

    5.3.1 跨域资源共享(CORS)

    由于同源策略的限制,当 AJAX 请求试图访问其他域的资源时,浏览器会阻止这种跨域请求。为了解决跨域请求问题,可以使用跨域资源共享(CORS)机制。CORS 允许服务器在响应头中添加一个 Access-Control-Allow-Origin 字段,指示浏览器允许哪些源进行跨域访问。

    服务器端需要设置响应头,例如:

    Access-Control-Allow-Origin: ***
    

    客户端的 AJAX 请求会自动遵守 CORS 策略,因此无需在客户端进行特殊设置。

    5.3.2 JSONP 请求的实现与限制

    JSONP(JSON with Padding)是一种技术,它通过动态创建 标签的方式绕过同源策略,从而实现跨域请求。它的工作原理如下:

    // 创建一个 script 标签并设置其 src 属性来发起请求
    var script = document.createElement('script');
    script.src = '***';
    document.head.appendChild(script);
    

    在上面的例子中, callback=? 是一个查询参数,服务器需要在其响应中使用这个回调函数的名称。这种方法只支持 GET 请求,且需要服务器端配合生成正确的 JSONP 响应。虽然这种方法简单易用,但它也有一些安全限制和使用限制,例如只能用于 GET 请求并且需要服务器端支持 JSONP 响应格式。

    6. jQuery 深入应用技巧

    6.1 jQuery 链式操作的妙用

    6.1.1 链式操作的原理

    jQuery 链式操作允许我们在一个表达式中使用多个方法,每个方法被调用后都会返回一个 jQuery 对象,这样就可以继续链式调用其他方法。这种技术极大地简化了代码,提高了开发效率。

    链式操作的基本原理是在每个 jQuery 方法执行完毕后返回当前的 jQuery 对象实例。例如,当你使用 $(selector).css("color", "red").animate({left: '+=50'}, 1000) 这样的代码时, css 方法和 animate 方法都返回了 jQuery 对象,使得我们可以继续在同一个对象上应用新的操作。

    6.1.2 链式操作的最佳实践

    在使用链式操作时,最佳实践之一就是保持代码的可读性。为了做到这一点,可以在每个方法后添加换行,并适当地进行缩进。例如:

    $("#myElement")
      .css("color", "blue") // 设置颜色为蓝色
      .css("font-size", "24px") // 设置字体大小为 24 像素
      .addClass("highlight") // 添加高亮类
      .on("click", function() {/* 点击事件的处理 */}); // 绑定点击事件
    

    这样,代码不仅执行效率高,而且易于阅读和维护。在处理复杂的 DOM 操作和动画效果时,链式操作的技巧尤为重要。

    6.2 jQuery 社区插件的集成与应用

    6.2.1 插件的选择与安装

    jQuery 社区中有成千上万的插件可供使用,这些插件可以扩展 jQuery 的功能,帮助我们快速实现一些复杂的界面和交互效果。选择合适的插件时,我们需要考虑以下因素:

    • 功能需求:首先明确你的项目需要什么样的功能。
    • 社区评价:查看插件的星星数、下载量和社区反馈。
    • 兼容性:确认插件与当前项目的 jQuery 版本兼容。
    • 活跃度:检查开发者是否还在维护插件。

    安装插件通常很简单,只需要通过 npm 安装、下载并引入 JavaScript 文件或者使用包管理器等方法即可。

    6.2.2 插件的配置与定制

    在集成插件后,通常需要根据项目需求进行一定的配置,以实现最理想的使用效果。很多插件允许通过选项(options)进行配置,你可以查看插件文档了解如何定制。

    $("#slider").slider({
        min: 0,
        max: 100,
        value: 25
    });
    

    上述代码展示了如何配置 jQuery UI 的滑块控件。一些插件还支持自定义函数,让你能够修改插件的默认行为。

    6.3 jQuery 版本兼容性问题与解决

    6.3.1 兼容性问题的常见原因

    随着 jQuery 更新,新的版本会带来新的特性和语法改进,但同时可能带来与旧代码或旧版浏览器的不兼容问题。常见的兼容性问题包括:

    • 新特性使用:如 $.Deferred 在旧版本 jQuery 中不可用。
    • DOM 方法差异:不同浏览器或不同版本浏览器对 DOM 操作的支持程度不同。
    • CSS 样式兼容:不同浏览器可能对 CSS 样式的支持存在差异。

    6.3.2 兼容性问题的解决方案

    解决兼容性问题的常用方法有:

    • 使用 jQuery Migrate 插件:这个插件可以帮助你迁移到新的 jQuery 版本,并提供关于废弃功能的警告。
    • 为旧浏览器创建 Polyfill:对于旧浏览器缺失的功能,可以寻找或自己编写 Polyfill 来弥补。
    • 条件性引入不同版本的 jQuery:根据用户的浏览器版本,条件性地引入不同版本的 jQuery 库,以保持功能的一致性。
    
    ');
    }
    
    

    通过上述措施,我们可以确保 jQuery 在不同浏览器和不同版本之间保持较好的兼容性。

    本文还有配套的精品资源,点击获取 详细解析 jQuery API 中文版使用指南

    简介:《jQuery API 中文说明文档》是 Web 开发者的宝贵资源,详尽解释了如何通过 jQuery 库进行高效的 DOM 操作和事件处理。文档涵盖了选择器、DOM 操作、事件处理、动画效果、AJAX 调用、链式操作、插件使用、遍历方法、实用工具以及版本兼容性等多个关键知识点,是学习和精通 jQuery 的实用参考资料。

    本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

    原文地址: 详细解析 jQuery API 中文版使用指南

      正文完
       0
      Yojack
      版权声明:本篇文章由 Yojack 于2024-11-10发表,共计10989字。
      转载说明:
      1 本网站名称:优杰开发笔记
      2 本站永久网址:https://yojack.cn
      3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
      4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5 本站所有内容均可转载及分享, 但请注明出处
      6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
      7 站长邮箱:laylwenl@gmail.com
      评论(没有评论)