【问题标题】:How can I add "class" attributes to HTML elements?如何向 HTML 元素添加“类”属性?
【发布时间】:2011-12-26 11:30:20
【问题描述】:

我有以下 HTML。我想将class="last" 属性添加到每个列表中的最终li 元素中。我怎样才能做到这一点?

<div class="gpbscol">
<ul class="listl">
    <li>ACCESSORIES</li>
    <li>AMPLIFIERS</li>
    <li>ANALOG AUDIO PROCESSING</li>
    <li>MICROPHONE PREAMPLIFIERS</li>
    <li>MICROPHONES</li>
    <li>SPEAKERS/MONITORS</li>
    <li>STUDIO</li>
    <li>DIGITAL AUDIO PROCESSING</li>
    <li>CONSOLES, MIXERS</li>
    <li>DAWS/PERIPHERALS</li>
</ul>
</div>
<div class="audio"> 
   <ul class="listl">
    <li>DAWS/PERIPHERALS</li>
    <li>LOUDSPEAKERS — FOH</li>
    <li>RECORDERS/PLAYERS</li>
    <li>HEADPHONES</li>
    <li>MICROPHONES - WIRELESS CONVERTERS</li>
    <li>NETWORK AUDIO / CONTROL / SNAKES</li>
    <li>COMPUTER AUDIO INTERFACES</li>
    <li>INTERCONNECTS</li>
    <li>LOUDSPEAKERS — STAGE MONITORS</li>
    <li>ACOUSTIC TREATMENT</li>
    <li>MI PRODUCTS</li>
   </ul>
</div>

所以最后的元素可能是

<li class="last">MI PRODUCTS</li>

【问题讨论】:

  • 在客户端 JavaScript 中这不是更容易吗?为什么要在服务器端处理这个?
  • 什么是html?一个字符串变量,一个网络组件等。
  • 那是因为上面的结构直接来自数据库,所以我只需要在服务器端进行附加。
  • 我建议使用 HTML 解析器 Check html agility pack
  • 所以你最简单的选择就是像约翰所说的那样在客户端使用一些 javascript。

标签: c# asp.net string append


【解决方案1】:

最简单的,这是使用 HtmlAgilityPack;

TextWriter text = new StringWriter();
string set =  [html here];
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(set);
HtmlNode node = doc.DocumentNode.SelectSingleNode("//li[last()]");
HtmlAttribute attr;
attr = node.SetAttributeValue("class", "last");
doc.Save(text);
return text;

无论如何,谢谢大家帮助我。

【讨论】:

    【解决方案2】:

    使用 jQuery 会更容易:

    $(function(){
        $("ul.listl li:last").addClass("last");
    });
    

    就是这样,伙计们:)

    【讨论】:

    • @Smamatti:谢谢……如此细微的差别。
    【解决方案3】:
    string[] g=@"<div class=""gpbscol"">
    <ul class=""listl"">
        <li>ACCESSORIES</li>
        <li>AMPLIFIERS</li>
        <li>ANALOG AUDIO PROCESSING</li>
        <li>MICROPHONE PREAMPLIFIERS</li>
        <li>MICROPHONES</li>
        <li>SPEAKERS/MONITORS</li>
        <li>STUDIO</li>
        <li>DIGITAL AUDIO PROCESSING</li>
        <li>CONSOLES, MIXERS</li>
        <li>DAWS/PERIPHERALS</li>
    </ul>
    </div>
    <div class=""audio""> 
       <ul class=""listl"">
        <li>DAWS/PERIPHERALS</li>
        <li>LOUDSPEAKERS — FOH</li>
        <li>RECORDERS/PLAYERS</li>
        <li>HEADPHONES</li>
        <li>MICROPHONES - WIRELESS CONVERTERS</li>
        <li>NETWORK AUDIO / CONTROL / SNAKES</li>
        <li>COMPUTER AUDIO INTERFACES</li>
        <li>INTERCONNECTS</li>
        <li>LOUDSPEAKERS — STAGE MONITORS</li>
        <li>ACOUSTIC TREATMENT</li>
        <li>MI PRODUCTS</li>
       </ul>
    </div>".Split(new string[]{"<li>"});
    
    g[g.length-1]=g[g.length-1].replace("<li>","<li class='last' >");
    
    string newString=String.Join("", g);
    

    【讨论】:

    • 无法创建 .Split(new string[]{"
    • "});字符串数组上的实例..你能检查一下吗
    【解决方案4】:

    我会是一个样式问题。如果我没有客户端代码的选项,我会选择 CSS 样式。你可以这样考虑:

    ul.listl li:last-child { }
    

    【讨论】:

      【解决方案5】:

      我同意@JohnHartsock,但如果您想按照自己的方式进行操作,您可以使用各种库来帮助您查询 html 元素 (DOM)。

      1. Fizzler
      2. Sharp-Query
      3. HTML Agility Pack

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签