在 class 名称前加上 jquery
prefix a class name with jquery
我的问题看起来很简单,但我没有找到解决方案。我的网页上有一些这样的代码:
<code class="bash">
...
<code class="markdown">
而且我想使用 Prism 库来进行语法高亮显示。但它需要有一个像这样的 class
<code class="language-bash">
...
<code class="language-markdown">
所以我的问题是,如何在 JQuery 中在语言命名前添加 "language-"?
我已经搜索了很多,但前缀不适用于 class 和 class 上的函数,如 addClass、toggleClass 等不存储实际的 class 以添加前缀.
有什么想法吗?
非常感谢。
您可以检索所有 code
元素,检查它们有什么 class,然后通过删除然后添加新元素来重命名它。
$("code").each(function(index, elt) {
var jqElt = $(elt);
var eltClass = jqElt.attr('class');
jqElt.removeClass(eltClass);
jqElt.addClass('language-'+eltClass);
})
var classes = ['bash', 'markdown'];
for (let i = 0; i < classes.length; i++){
$(`.${classes[i]}`).removeClass(classes[i]).addClass(`language-${classes[i]}`)
};
$('.class')
找到带class的元素,.removeClass('class')
去掉开头的class,.addClass('language-class')
你可以尝试下面的方法,当你有 multiple classes
时也能很好地工作,如果假设,
$('code').each(function() {
var elm = $(this);
var classes = elm.attr('class');
classes.split(' ').forEach(function(class){
elm.removeClass(class);
elm.addClass('language-' + class);
}
})
您必须将每个 class 都存储在一个 var 中,并将其与前缀连接,然后删除旧的 class 并设置新的。
$( "code" ).each(function( index , elm ) {
var oldClass = $(elm).attr('class');
newClass = 'language' + classVal ;
$(elm).removeClass(oldClass);
$(elm).addClass(newClass);
});
使用 ClassList 获取所有 classes 的列表。
这里只有一个class,只需在前面加上"language-",然后再次更新class列表
$(document).ready(function() {
var codeElements = $('code');
var length = codeElements.length;
codeElements.each(function(item) {
var classList = codeElements[item].classList;
var newList = [];
classList = "language-" + classList;
codeElements[item].classList = classList;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<code class="bash">
<code class="markdown">
希望对您有所帮助
直接替换 class 属性应该可以正常工作
$('.bash, .markdown').attr('class', function(_,klass) {
return klass.replace(/(bash|markdown)/, "language-");
});
这是另一个具有不同 class 场景的演示:(如果元素有 2 个或更多 class,则为后续 class 加前缀)
$('code').each(function(index, item) {
if ($(item).attr('class') === undefined) return; // if no class at all do nothing
var classList = $(item).attr('class').trim().replace(/(\s+)/g, ' ').split(' ');
var className = classList.map(function(val, ndx) {
return val = `language-` + val;
}).join(' ');
$(item).attr('class', className);
})
code {
display: block;
}
[class^="language-"] {
color: crimson;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4>Different scenarios of classes</h4>
<code class="bash">initial Class: "bash"</code>
<code class="markdown">initial Class: "markdown"</code>
<code class="bash random">initial Class: "bash random"</code>
<code>initial Class: No class</code>
<code class="bash what ">initial Class: "markdown what "</code>
<code class=" extra things">initial Class: " extra things"</code>
<code class="random items">initial Class: "random items"</code>
我的问题看起来很简单,但我没有找到解决方案。我的网页上有一些这样的代码:
<code class="bash">
...
<code class="markdown">
而且我想使用 Prism 库来进行语法高亮显示。但它需要有一个像这样的 class
<code class="language-bash">
...
<code class="language-markdown">
所以我的问题是,如何在 JQuery 中在语言命名前添加 "language-"?
我已经搜索了很多,但前缀不适用于 class 和 class 上的函数,如 addClass、toggleClass 等不存储实际的 class 以添加前缀.
有什么想法吗?
非常感谢。
您可以检索所有 code
元素,检查它们有什么 class,然后通过删除然后添加新元素来重命名它。
$("code").each(function(index, elt) {
var jqElt = $(elt);
var eltClass = jqElt.attr('class');
jqElt.removeClass(eltClass);
jqElt.addClass('language-'+eltClass);
})
var classes = ['bash', 'markdown'];
for (let i = 0; i < classes.length; i++){
$(`.${classes[i]}`).removeClass(classes[i]).addClass(`language-${classes[i]}`)
};
$('.class')
找到带class的元素,.removeClass('class')
去掉开头的class,.addClass('language-class')
你可以尝试下面的方法,当你有 multiple classes
时也能很好地工作,如果假设,
$('code').each(function() {
var elm = $(this);
var classes = elm.attr('class');
classes.split(' ').forEach(function(class){
elm.removeClass(class);
elm.addClass('language-' + class);
}
})
您必须将每个 class 都存储在一个 var 中,并将其与前缀连接,然后删除旧的 class 并设置新的。
$( "code" ).each(function( index , elm ) {
var oldClass = $(elm).attr('class');
newClass = 'language' + classVal ;
$(elm).removeClass(oldClass);
$(elm).addClass(newClass);
});
使用 ClassList 获取所有 classes 的列表。
这里只有一个class,只需在前面加上"language-",然后再次更新class列表
$(document).ready(function() {
var codeElements = $('code');
var length = codeElements.length;
codeElements.each(function(item) {
var classList = codeElements[item].classList;
var newList = [];
classList = "language-" + classList;
codeElements[item].classList = classList;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<code class="bash">
<code class="markdown">
希望对您有所帮助
直接替换 class 属性应该可以正常工作
$('.bash, .markdown').attr('class', function(_,klass) {
return klass.replace(/(bash|markdown)/, "language-");
});
这是另一个具有不同 class 场景的演示:(如果元素有 2 个或更多 class,则为后续 class 加前缀)
$('code').each(function(index, item) {
if ($(item).attr('class') === undefined) return; // if no class at all do nothing
var classList = $(item).attr('class').trim().replace(/(\s+)/g, ' ').split(' ');
var className = classList.map(function(val, ndx) {
return val = `language-` + val;
}).join(' ');
$(item).attr('class', className);
})
code {
display: block;
}
[class^="language-"] {
color: crimson;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4>Different scenarios of classes</h4>
<code class="bash">initial Class: "bash"</code>
<code class="markdown">initial Class: "markdown"</code>
<code class="bash random">initial Class: "bash random"</code>
<code>initial Class: No class</code>
<code class="bash what ">initial Class: "markdown what "</code>
<code class=" extra things">initial Class: " extra things"</code>
<code class="random items">initial Class: "random items"</code>