Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript来更改元素的类_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript来更改元素的类

Javascript来更改元素的类,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,这是我目前正在处理的一个网页上的大量精简源代码 <!--// GRID ENTRY //--> <li class="entry" id="sjDDulC8wt"> <div class="entry_actions"> <ul class="entry_actions"> <li class='have_it'> <a href='javascrip

这是我目前正在处理的一个网页上的大量精简源代码

<!--// GRID ENTRY //-->
    <li class="entry" id="sjDDulC8wt">
        <div class="entry_actions">
            <ul class="entry_actions">
                <li class='have_it'>
<a href='javascript: haveItem("name", "id", "none")'  target='_self' title='Have It' class='have_it'>%</a></li>
            </ul>
        </div>
    </li>

单击该链接时,
haveItem()
函数将运行,但不会更改类。如何更改脚本以便单击链接更改类?

我假设您使用的是jQuery,因为您使用的是
removeClass()
addClass
。否则,我建议您链接到,以便下面的代码正常工作,或者只使用JavaScript

var targetA = $('#sjDDulC8wt .have_it');
targetA.addClass('selected');
以下是关于您的代码的一些您可以改进的地方,以供将来参考:

  • getElementById()
    接受要检索的元素的id作为字符串。基本上,您应该将您的ID包装在
  • 在放置空格和下划线时要小心。它们不是一回事。列表项的标题是
    haveit
    ,而JavaScript的标题是
    haveit
  • 大小写很重要。
    Have_It
    Have_It
    不是一回事。当您尝试按ID获取元素时,请注意这一点
  • 带有空格的类实际上是多个类。
    have_it selected
    实际上既有
    have_it
    类,也有
    selected
    类。因此,不必删除
    have_it
    ,然后添加
    have_it selected
    -您可以直接添加
    selected
  • 函数
    getElementbyTitle()
    目前在JavaScript中不存在。此外,请再次注意大小写。通常,函数中每个单词的第一个字母都是大写的。因此,如果它确实存在,将被称为
    getElementbyTitle()
    (注意
    B
    而不是
    B

  • 我假设您使用的是jQuery,因为您使用的是
    removeClass()
    addClass
    。否则,我建议您链接到以便下面的代码正常工作,或者只使用JavaScript

    var targetA = $('#sjDDulC8wt .have_it');
    targetA.addClass('selected');
    
    以下是关于您的代码的一些您可以改进的地方,以供将来参考:

  • getElementById()
    将要检索的元素的id作为字符串接受。基本上,您应该将id包装在
    '
  • 在放置空格和下划线时要小心。它们不是一回事。您的列表项具有标题
    haveit
    ,而您的JavaScript具有
    haveit
  • 资本化很重要<代码>拥有它与
    拥有它
    不是一回事。当您尝试按ID获取元素时,请注意这一点
  • 一个包含空格的类实际上是多个类
    have_它selected
    实际上既有
    have_它
    类,也有
    selected
    类。因此,无需删除
    选择它
    ,然后添加
    选择它
    ——您可以直接添加
    选择的
  • 函数
    getElementbyTitle()
    当前不存在于JavaScript中。此外,还要注意资本化。通常,函数中每个单词的第一个字母都大写。因此,如果它确实存在,它将被称为
    getElementByTitle()
    (注意
    B
    而不是
    B

  • 如果不能使用jQuery,则可以使用以下命令更改元素的类名:

    还要注意这个函数:(HTML5)

    正如已经指出的,在选择元素时还存在一些其他问题。从您的示例来看,您似乎希望使用:

    var element = document.getElementById("sjDDulC8wt");
    var children = element.getElementsByClassName("have_it");
    children[0].className = "have_it selected";
    
    注意这里没有错误处理/空检查。这将处理一个简单的情况,即假设存在指定类,只更改第一个子类


    但如果可以使用jQuery,则更喜欢jQuery。从您使用的
    addClass/removeClass
    来看,您似乎已经期望使用jQuery了。

    如果您不能使用jQuery,那么您可以使用以下命令更改元素的类名:

    还要注意这个函数:(HTML5)

    正如已经指出的,在选择元素时还存在一些其他问题。从您的示例来看,您似乎希望使用:

    var element = document.getElementById("sjDDulC8wt");
    var children = element.getElementsByClassName("have_it");
    children[0].className = "have_it selected";
    
    注意这里没有错误处理/空检查。这将处理一个简单的情况,即假设存在指定类,只更改第一个子类


    但如果可以使用jQuery,则更喜欢jQuery。从您使用的
    addClass/removeClass
    来看,您似乎已经在期待jQuery了。

    这将为您完成以下任务:

    <a title="Have It" class="have_it" onclick="this.className+=' selected'">%</a>
    

    。您使用的方法(
    getElementbyID
    getelementsbytle
    removeClass
    addClass
    )均不存在。

    这将为您完成以下任务:

    <a title="Have It" class="have_it" onclick="this.className+=' selected'">%</a>
    

    。您使用的方法(
    getElementbyID
    getelementsbytle
    removeClass
    addClass
    )均不存在。

    此处:

    var anchor = document.querySelector( '#sjDDulC8wt [title="Have It"]' );
    if ( anchor ) anchor.classList.add( 'selected' );
    
    现场演示:

    (在较旧的浏览器中不起作用。)

    此处:

    var anchor = document.querySelector( '#sjDDulC8wt [title="Have It"]' );
    if ( anchor ) anchor.classList.add( 'selected' );
    
    现场演示:


    (在旧浏览器中不起作用。)

    成功找到元素后,可以执行以下操作之一:

  • element.classList.add(“selected”)

    它使用了FF3.6、IE 10、Chrome 8、Opera 11.50、Safari 5.1及更高版本的全新功能。一旦您确信您的客户机将拥有其中一种浏览器(不久的将来),这将是最首选的方式

  • element.className+=“已选定”

    。这很有效,可能是最简单的方法。不像
    类列表
    那样好,但适用于所有浏览器


  • 成功找到元素后,可以执行以下操作之一:

  • element.classList.add(“selected”)

    它使用了FF3.6、IE 10、Chrome 8、Opera 11.50、Safari 5.1及更高版本的全新功能。一旦你确信你的客户将拥有