JQuery 的 .prop() 不会设置 属性

JQuery's .prop() won't set a property

我正在尝试使用 JQuery .prop() 函数向元素添加自定义属性,但无济于事。这是我尝试过的:

var header = $(document.getElementById("header-main"));
if (header.prop('error')) {
  //do something
}
else {
  $('#header-main').prop('error', true);
  header.prop('error', true);
  //neither of these change the element
  header.html('Changes some text'); //.html() actually seems to work.
}

阅读文档和 Whosebug 上的一些帖子后,我感到很困惑,但我似乎无法弄清楚问题所在。

我正在使用 JQuery 版本 3.3.1 的价值

您已经在第一行回答了您的问题。

I'm trying to use the prop() function to add a custom attribute

prop() 设置 properties 并且没有“custom 属性”这样的东西。如果您想创建自定义 属性 ,请使用 attr() - 但我建议不要这样做,因为这是不好的做法。

一个更好的主意是将自定义信息存储在 data 属性中。换句话说,使用 data()

var $header = $('#header-main');
if ($header.data('error')) {
  // do something
}  else {
  $header.data('error', true).html('Changes some text');
}

Can I still incorporate this without css? Right now I'm using css rules such as #header-main[error]

这里要注意的一件事是jQuery的data()方法根本不影响DOM。由于您需要 DOM 更新,因此您的 CSS 属性选择器将起作用,请改用 attr('data-error')

var $header = $('#header-main');
if ($header.attr('data-error') == 'true') { // ugly comparison, but not much we can do about it
  // do something
}  else {
  $header.attr('data-error', 'true').html('Changes some text');
}
#header-main[data-error] { 
  color: #C00;
}