【问题标题】:How do I change the colour of the first LI value that is added through a XMLHttpRequest?如何更改通过 XMLHttpRequest 添加的第一个 LI 值的颜色?
【发布时间】:2016-06-17 21:55:37
【问题描述】:

我正在开展一个项目,用户可以在该项目中转到特定页面并浏览特定提要。此提要通过XMLHttpRequest 动态添加,这将为PHP 解析器提供#Cat=(value) 参数,然后PHP 解析器将执行相应的操作。

在此页面中,有几个 LI 元素将用于用户过滤/循环浏览提要。这些 LI 元素对于每个页面都是不同的 - 它们是从数据库中动态添加的。

每当用户单击特定 LI 或 URL 更改为包含类别时,我都成功地更改了 LI 的颜色。

我通过以下方式做到了这一点:从数据库中下载所有类别,并适当地显示它们。然后我从 URL 中获取 #Cat= 值,并执行 switch 语句 - 如果 Cat 值等于 LI 值,则更改 LI 值的颜色。

然而,我的问题是第一个 LI(无论页面如何,它都不是错字)不会改变。例如:一个页面将有 url #Cat=Front Page,如果我点击类别 Front Page 它不会改变,因为它是第一个 LI。在另一个页面上,url 也将是#Cat=Front Page,如果我点击 Front Page 类别,它会改变颜色,因为它不是第一个 LI。

我认为是我的JavaScript/JQuery 导致了这个问题。

JavaScript/JQuery:

activeCat("Default");

$(window).on( "hashchange", function()
{
    var Url = window.location.href;
    var Category = Url.substring(Url.indexOf("#Cat=") + 5);
    var Cat = decodeURI(Category);
    activeCat(Cat);
});

function activeCat(cat)
{
    switch (cat)
    {
        case "Default":
            $("#channelCategories li").first().css("color", "#2980b9");
            break;
        case "Front Page":
            $('ul li').each(function(i)
            {
                if($(this).hasClass('channelCategory'))
                {
                    $(this).css("color","black");
                }
            });
            alert("Channel has front-page category");
            $("#channelCategories li:contains('Front Page')").css("color", "#2980b9");
            break;
        case "United Kingdom":
            $('ul li').each(function(i)
            {
                if($(this).hasClass('channelCategory'))
                {
                    $(this).css("color","black");
                }
            });
            $("#channelCategories li:contains('United Kingdom')").css("color", "#2980b9");
            break;

PHP:

while($record = mysqli_fetch_array($myData))
{
    $Category = $record["Category"];
    if($i <= 5)
    {
        $html .=    "<a href='#Cat=$Category' class='noLink' id='$Category'><li class='channelCategory noLink Text'>$Category</li></a>";
    }
    else if ($i > 5)
    {
        //$dropContent[$j] .= "<a href='#Cat=$Category'><li class='channelCategory itemLink Text'>$Category</li></a>";
        $dropContent[$j] .= $Category;
        $j++;
    }
    $i++;
}

我的问题:当类别为默认时,如何更改第一个 LI 的颜色?另外在查看第一个LI时,如何更改它的颜色?

任何帮助将不胜感激。

谢谢。

编辑:感谢所有试图帮助我的人。我不明白为什么我的代码不起作用,但我已经实现了一个解决方法:添加第一个 li 时,我在其锚标记中添加一个唯一的类名 - 并选择第一个 li 我只是在搜索那个班级名称。

【问题讨论】:

  • 看看这个,用 css developer.mozilla.org/en-US/docs/Web/CSS/:first-of-type 定位大多数东西很容易,例如ul li:first-of-type { /* style properties */ }
  • 感谢您的回复。使用您的解决方案,li 不会永久显示为不同的颜色吗?
  • 请提供一些关于颜色何时应该改变以及为什么改变的规则的上下文
  • 请注意:您应该每页只使用一次id= 属性。例如,您正在循环并在该类别上多次给出id。如果类别是唯一的,那么也许它很好。 (虽然我不知道)
  • 当用户点击 LI 时颜色会改变,但默认情况下(也就是页面首次加载时)第一个 LI 会自动着色。我的问题是第一个 LI 默认不改变颜色,当我点击它时也不改变。

标签: javascript php jquery css ajax


【解决方案1】:

尝试将标签&lt;a&gt; 中的id 替换为class(带有id 的jQuery 选择器始终获得第一项)然后尝试添加/删除类($( ).addClass('firstDefault') 并使用css 更改颜色。

调试一下,var Cat 真的带有“默认”值吗?

【讨论】:

  • 我的问题是只有第一个 LI 不能更改等。是因为我使用 id 而不是类,还是因为其他原因?
  • 我认为我没有完全按照您的建议进行操作,但您的回答指出了我认为正确的方向。我仍然不明白为什么我的代码不起作用,但我已经实施了解决方法。添加第一个 li 时,li 的锚点有一个唯一的类名,我只是在搜索该类名作为选择第一个 li 的一种方式。很乱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多