Решение без CSS: вы можете использовать эту строку для удаления элементов из DOM:
table.rows[i].removeChild(childNode);
или:
childNode.style = 'display: none'
, чтобы сохранить элементы, но не отображать их.
var tableData = [{
"Item Code": "1001",
"Item Name": "Beverages",
"Selling Price": "65",
"Quantity": "12"
},
{
"Item Code": "2003",
"Item Name": "Juices",
"Selling Price": "75",
"Quantity": "14"
},
{
"Item Code": "1004",
"Item Name": "Soups",
"Selling Price": "689",
"Quantity": "15"
},
{
"Item Code": "2005",
"Item Name": "Cookies",
"Selling Price": "74",
"Quantity": "17"
},
]
function addTable(tableData) {
var col = Object.keys(tableData[0]);
var countNum = col.filter(i => !isNaN(i)).length;
var num = col.splice(0, countNum);
col = col.concat(num);
var table = document.createElement("table");
var tr = table.insertRow(-1); // TABLE ROW.
for (var i = 0; i < col.length; i++) {
var th = document.createElement("th"); // TABLE HEADER.
th.innerHTML = col[i];
tr.appendChild(th);
tr.classList.add("text-center");
tr.classList.add("head")
}
for (var i = 0; i < tableData.length; i++) {
tr = table.insertRow(-1);
for (var j = 0; j < col.length; j++) {
let tabCell = tr.insertCell(-1);
var hiddenField = document.createElement("input");
hiddenField.style.display = "none";
var tabledata = tableData[i][col[j]];
if (tableData[i]['Item Code'] === tableData[i][col[j]]) {
tabCell.innerHTML = tabledata;
hiddenField.setAttribute('name', 'Item_Code');
hiddenField.setAttribute('value', tabledata);
tabCell.appendChild(hiddenField);
}
if (tableData[i]['Item Name'] === tableData[i][col[j]]) {
tabCell.innerHTML = tabledata;
hiddenField.setAttribute('name', 'Item_Name');
hiddenField.setAttribute('value', tabledata);
tabCell.appendChild(hiddenField);
}
if (tableData[i]['Selling Price'] === tableData[i][col[j]]) {
/* tabCell.innerHTML = tabledata; */ //here i am hiding the selling price in body
hiddenField.setAttribute('name', 'sellingPrice');
hiddenField.setAttribute('value', tabledata);
tabCell.appendChild(hiddenField);
}
if (tableData[i]['Quantity'] === tableData[i][col[j]]) {
var quantityField = document.createElement("input");
quantityField.style.border = "none";
quantityField.style["text-align"] = "center";
quantityField.setAttribute('name', 'Quantity');
quantityField.setAttribute('value', tabledata);
quantityField.setAttribute('type', 'number');
quantityField.classList.add("dataReset");
tabCell.appendChild(quantityField);
/* console.log(quantityField) */
}
if (j > 1)
tabCell.classList.add("text-right");
}
}
var divContainer = document.getElementById("HourlysalesSummary");
divContainer.innerHTML = "";
divContainer.appendChild(table);
table.classList.add("table");
table.classList.add("table-striped");
table.classList.add("table-bordered");
table.classList.add("table-hover");
hideColumn(table, 3)
}
addTable(tableData);
function hideColumn(table, index) {
for(var i=0;i<table.rows.length;i++){
const childNode = table.rows[i].childNodes[index - 1];
//childNode.style = 'display: none'
table.rows[i].removeChild(childNode);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<table class="w-100" id=HourlysalesSummary></table>
Решение с использованием css:
table tr th:nth-child(3),
table tr td:nth-child(3){
display: none;
}
Пока что это выглядит как хороший кандидат для RegEx . Если это станет значительно более сложным, тогда может потребоваться более сложная схема токенизации, но вам следует избегать этого маршрута, если это не необходимо, поскольку это значительно больше работы. (с другой стороны, для сложных схем регулярное выражение быстро превращается в собаку, и его также следует избегать).
Это регулярное выражение должно решить вашу проблему:
("[^"]+"|\w+)\s*
Вот пример его использования на C #:
string data = "the quick \"brown fox\" jumps over the \"lazy dog\"";
string pattern = @"(""[^""]+""|\w+)\s*";
MatchCollection mc = Regex.Matches(data, pattern);
foreach(Match m in mc)
{
string group = m.Groups[0].Value;
}
Настоящее Преимущество этого метода в том, что его можно легко расширить, включив в него ваше требование «-», например:
string data = "the quick \"brown fox\" jumps over " +
"the \"lazy dog\" -\"lazy cat\" -energetic";
string pattern = @"(-""[^""]+""|""[^""]+""|-\w+|\w+)\s*";
MatchCollection mc = Regex.Matches(data, pattern);
foreach(Match m in mc)
{
string group = m.Groups[0].Value;
}
Теперь я ненавижу читать Regex так же сильно, как и другие, но если вы разделите его, это будет довольно легко прочитать:
(
-"[^"]+"
|
"[^"]+"
|
-\w+
|
\w+
)\s*
Пояснение
Использование переменной среды VIRTUAL_ENV
ненадежно. Он устанавливается сценарием оболочки virtualenv activate
, но virtualenv можно использовать без активации, напрямую запустив исполняемый файл из виртуального bin /
(или Scripts
) каталог, и в этом случае $ VIRTUAL_ENV
не будет установлен.
Существует несколько хороших ответов здесь и немного меньше устойчивых. Вот обзор.
, не полагаются на местоположении Python или site-packages
папка.
, Если они установлены на нестандартные местоположения, который делает не средний, Вы находитесь на самом деле в виртуальной среде. У пользователей может быть больше чем одна версия Python, установленная, и это не всегда, где Вы ожидаете, что они будут.
Стараются не смотреть на:
sys.executable
sys.prefix
pip -V
which python
кроме того, не проверяйте на присутствие venv
, .venv
или envs
ни в одном из этих путей. Это повредится для сред с более уникальным местоположением. Например, Pipenv использует значения хэш-функции в качестве названия его сред.
VIRTUAL_ENV
переменная среды И virtualenv
и venv
установила переменную среды $VIRTUAL_ENV
при активации среды. См. PEP 405.
можно считать эту переменную в сценариях оболочки или использовать этот код Python, чтобы определить, установлено ли это.
import os
running_in_virtualenv = "VIRTUAL_ENV" in os.environ
# alternative ways to write this, also supporting the case where
# the variable is set but contains an empty string to indicate
# 'not in a virtual environment':
running_in_virtualenv = bool(os.environ.get("VIRTUAL_ENV"))
running_in_virtualenv = bool(os.getenv("VIRTUAL_ENV"))
проблема, это только работает, когда среда , активировался activate
сценарий оболочки.
можно запустить сценарии среды , не активируя среду , поэтому если это - беспокойство, необходимо использовать другой метод.
sys.real_prefix
и sys.base_prefix
точки Virtualenv sys.prefix
к Python, установленному в virtualenv, как Вы ожидали бы.
В то же время, исходное значение [1 119] также сделано доступным как новый атрибут [1 120]: sys.real_prefix
. Это - то, что мы используем, чтобы обнаружить, если мы находимся в virtualenv.
import sys
running_in_virtualenv = hasattr(sys, "real_prefix")
существует проблема хотя: venv
и pyvenv
делают это по-другому по сравнению с [1 124] - они не устанавливают real_prefix
. Вместо этого они устанавливают base_prefix
на другое значение от [1 127].
Так для сейфа проверьте обоих, как предложено в [1 130] ответ hroncok :
import sys
virtualenv_prefix = getattr(sys, "real_prefix", None)
venv_prefix = getattr(sys, "base_prefix", sys.prefix)
running_in_virtualenv = virtualenv_prefix or venv_prefix != sys.prefix
при использовании виртуальных сред Anacona проверьте ответ Victoria Stuart .
Самый простой способ - просто запустить: which python
, если вы находитесь в virtualenv, он будет указывать на своего питона вместо глобального