Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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
Php 将CSS类用于JS标记是一种糟糕的做法吗?_Php_Javascript_Jquery_Css - Fatal编程技术网

Php 将CSS类用于JS标记是一种糟糕的做法吗?

Php 将CSS类用于JS标记是一种糟糕的做法吗?,php,javascript,jquery,css,Php,Javascript,Jquery,Css,场景: 使用PHP和模板引擎生成的主页 该页面正在重新设计 新的设计基于jqueryui 当前CMS使用多个模板:页面模板、文章详细信息模板、评论模板等 问题: 一些模板(比如文章细节模板)生成html片段,这些片段应该使用jQueryUI元素,比如选项卡。当前,页面模板的数据源不包含任何信息,即哪些元素应该在文档头的主jQuery调用中转换为jQuery UI元素 可能的解决方案 将类似“jqTabs”的CSS类添加到子模板的html标记中,并在主jQuery脚本中使用选择器.jqTabs

场景:

  • 使用PHP和模板引擎生成的主页
  • 该页面正在重新设计
  • 新的设计基于jqueryui
  • 当前CMS使用多个模板:页面模板、文章详细信息模板、评论模板等
问题: 一些模板(比如文章细节模板)生成html片段,这些片段应该使用jQueryUI元素,比如选项卡。当前,页面模板的数据源不包含任何信息,即哪些元素应该在文档头的主jQuery调用中转换为jQuery UI元素

可能的解决方案 将类似“jqTabs”的CSS类添加到子模板的html标记中,并在主jQuery脚本中使用选择器
.jqTabs

问题 这是个坏主意吗

顺便说一句:“使用不同的CMS”不是一个有效的答案,因为这现在不是一个选项(截止日期、预算……你可以说-。-)。

一点也不坏

这是类的主要用途之一

类(如和ID)既可以用作元素样式的方法,也可以用作脚本编写的挂钩

在这种情况下,它可能是最好的解决方案,因为它允许在更广泛的重新设计中对标记进行最小的更改


而且它很容易逆转。

我认为使用CSS类作为JavaScript的挂钩确实是一种不好的做法。我之所以这样说,是因为这种方法将CSS和JavaScript混合在一起,常常会导致不必要的混乱

让我解释一下:现在我正在向现有系统添加新模板,该系统使用动态用户控制的管理设置来控制CSS属性(页面宽度、字体大小、颜色等)。这些设置也会影响JS属性(幻灯片放映选项、幻灯片之间的延迟等)

问题是,由于有这么多CSS类被用作JavaScript钩子,我很难确定哪些类用于样式,哪些类用作JS钩子,哪些类用于两者!因此,在创建新模板时,很难从零开始使用新标记,因为我会忽略CSS和JS功能的各种重要类

<a href="/mylink" class="my-style-class my-other-style-class js-my-hook-1 js-myhook-2">
    My link
</a>
如果CSS类只用于样式化,而其他JS钩子只用于JS,那么这项任务就会容易得多。我设想这可以通过HTML5数据属性来实现,它看起来像这样:

<a href="#" class="button" data-lightbox="true" data-slide-delay="250">my link</a>

你为什么认为这可能是个坏主意?不是个坏主意。我更喜欢参考类。从长远来看,有很多“简单”的解决方案都是“坏主意”。最好问一下,然后在几个月内重建一切。不,这不是个坏主意。只需正确使用类和ID;也就是说,使用类来“分类”或分组不同的元素,并使用ID属性来指向一个且仅指向一个元素(不要在页面上的任何其他元素中重用ID值)。这不是只适用于HTML5兼容的浏览器吗?我们70%的网站用户是政府,其中一半以上的用户仍在使用IE7,并且在未来2-3年内没有升级计划。@Brian:最终我用这种方法解决了这个问题:因为我大量使用了jquery ui和tal模板,所以我使用了一组有文档记录的类,这些类应用了默认的外观(ui对话框,ui列表…)所有这些类都以ui作为前缀。所有其他“样式”类都以cs(自定义样式)作为前缀。但我同意你的方式更干净。