JQuery -根据元素innerHTML更改属性
JQuery - Change attr based on element innerHTML
我试图在整个网站的产品中添加模式标记,但我希望div元素的attr根据innerHTML
的文本更改HTML:<div class="badgeIds" itemtype="https://schema.org/ItemAvailability" itemprop="availability">
Online Only
</div>
这是我为Javascript编写的内容。我的逻辑有问题吗?
var avail = document.find("div.badgeIds");
if (avail.html().trim() == "Preorder") {
avail.attr("itemprop", "availability:Preorder");
} elseif (avail.html().trim() == "Online Only") {
avail.attr("itemprop", "availability:OnlineOnly");
} elseif (avail.html().trim() == "Available In Store Only") {
avail.attr("itemprop", "availability:InStoreOnly");
};
var avail = $("div.badgeIds");
var txt = $("div.badgeIds").text().trim();
if (txt == "Preorder") {
avail.attr("itemprop", "availability:Preorder");
} else if (txt == "Online Only") {
avail.attr("itemprop", "availability:OnlineOnly");
} else if (txt == "Available In Store Only") {
avail.attr("itemprop", "availability:InStoreOnly");
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="badgeIds" itemtype="https://schema.org/ItemAvailability" itemprop="availability">
Online Only
</div>
为什么不直接
avail.attr("itemprop", "availability:" + avail.html().replace(/'s|Available/g, "");
正如@Barmer评论的
var avail = $("div.badgeIds");
如果该类中有多个DOM元素,则需要使用循环。您可以使用.each()
来循环遍历所有元素,或者利用.attr()
可以作为值参数给定函数的事实,并且它将自动循环。函数调用时,this
等于DOM元素,其返回值作为新属性。
$("div.badgeIds").attr("itemprop", function() {
var html = $(this).html().trim();
switch (html) {
case "Preorder":
return "availability:Preorder";
break;
case "Online Only":
return "availability:OnlineOnly";
break;
case "Available In Store Only":
return "availability:InStoreOnly";
break;
default:
return "";
}
});
顺便说一句,你不应该这样创建你自己的属性。如果需要特定于应用程序的属性,请使用标准的data-XXX
属性。所以应该是data-itemprop
而不是itemprop
。在jQuery中,你可以使用.data()
来实现这一点(它会以同样的方式自动循环)。
你不能使用document.find(selector)
。它需要是$(document).find(selector)
,因为find()
是一个jQuery方法,而不是DOM方法。更简单的写法是$(selector)
试试$("div.badgeId");
一些代码改进是我的观点。
var avail = $("#badgeId");
var text = avail.html().trim();
if (text == "Preorder") {
avail.attr("itemprop", "availability:Preorder");
} else if (text == "Online Only") {
avail.attr("itemprop", "availability:OnlineOnly");
} else if (text == "Available In Store Only") {
avail.attr("itemprop", "availability:InStoreOnly");
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="badgeId" class="badgeIds" data-itemtype="https://schema.org/ItemAvailability" data-itemprop="availability">
Online Only
</div>
相关文章:
- 无法将属性“innerHTML”设置为空
- getElementById TypeError: “无法将属性'innerHTML'设置为null
- Unca不能将属性“innerHTML”设置为空
- 无法设置属性“innerHTML”的值:计时问题
- 无法设置未定义的属性“innerHTML”
- 无法在 Chrome 扩展程序中将属性“innerHTML”设置为空
- 无法将属性“innerHTML”设置为空
- “无法设置未定义的属性”innerHTML”
- 无法设置空错误的属性“innerHTML”
- 未捕获的类型错误:无法读取 Firefox 和 Chrome 中的属性“innerHTML”
- 无法将属性“innerHTML”设置为空
- Javascript -无法读取属性'innerHTML'的定义
- getElementsByTagName("LI")不能读取属性'innerHTML'
- 未捕获的类型错误:不能设置属性'innerHTML'为hiddenfield设置innerhtml时为n
- 无法读取属性'innerHTML'使用.on()返回null
- 不能设置属性'innerHTML'在AJAX调用中为空
- 未捕获的类型错误:不能设置属性'innerHTML'不确定为什么会发生
- 未捕获的类型错误:不能设置属性'innerHTML'第34行为空
- 不能设置属性'innerHTML'零.AJAX (java)的问题
- 不能设置属性'innerHTML'零